热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

高并发系统设计其它知识(一)

全局唯一ID如果系统有使用数据库,最常想到的全局唯一ID是利用数据库的自增字段来保证唯一性。这种方法生成的长度不同,并且与数据为交互,性能较差。其它两个常用的两个算法是:UUID与

全局唯一ID

如果系统有使用数据库,最常想到的全局唯一ID是利用数据库的自增字段来保证唯一性。这种方法生成的长度不同,并且与数据为交互,性能较差。
其它两个常用的两个算法是: UUID与snowflake

  • UUID
    通用唯一识别码,不依赖中间机构的注册和分配,32位字符,提供5个算法实现,具体算法可以网上搜索。
  1. 算法1,2可以保证唯一性;
  2. 算法3、5除了利用的hash算法不同外,其它都相同,可以保证局部唯一,有极小的概率重复,可忽略不计。
  3. 算法4,使用伪随机算法,不建议使用
  • Snowflake
    twitter开源的分布式ID生成算法,64位由若***分组成,每一部分都存储有特定含义的数据,比如说时间戳、机器 ID、***等等,最终生成全局唯一的有序 ID。如下图:
    高并发系统设计-其它知识(一)

  • 两种实现方式

  1. 嵌入到业务代码中,不涉及服务调用性能更高,但机器ID数有限制,过多会有重复
  2. 作为服务提供,可以通过服务数,来降低机器ID数,可以用多余的位表示其它信息。
  • 特点
  1. 全局唯一
  2. 单调递增
  3. 包含业务含义ID
  • 缺点:
  1. 依赖于系统的时间戳,一旦系统时间不准,就有可能生成重复的 ID,要防止系统时间回跳。

NOSQL

NOSQL区别于关系型数据库系统,不使用SQL查询语言,提供优秀的横向扩展能力和读写性能,非常适合于高并发大数据的系统。
常见的:redis, leveldb这样的KV存储;Hbase、Cassandra列式存储数据库(关系数据库是行式);MongoDB、CouchDB文档型数据库。
NOSQL虽然有很多优点,但它不能完全替换关系型数据库,每种都有其适应的场景,可以与关系统数据库做到互补。

  • 提高写入性能
    大部份NoSql会使用LSM 树做为存储引擎来提高写入性能,将随机写改为顺序写。
  • NoSQL 数据库的支持全文搜索功能,可以很好的支持关系型数据库这方面的不足;
  • 在扩展性方面,NoSQL 数据库天生支持分布式,支持数据冗余和数据分片的特性。

缓存

在平常的开发过程中,对于IO的性能的优化,较常想到的方式就是增加缓存。

  • 缓存
  1. 从概念上讲,缓存是一种存储数据的组件,可以让对数据的请求更快地返回。由于设备之间读写性能差距较大,能过将数据放入读写性能较高的设备中,提高读写性能。
  2. 常见的缓存场景有:系统内存的分配、视频网站的缓存、静态网页的缓存。
  • 分类
  1. 静态缓存:从字面意思就是对静态数据的缓存,常见的静态页面缓存就属于这类,一般位于负载均衡层。
  2. 分布式缓存:支持动态数据,能过在服务前部署分布式缓存来提高服务性能,一般位于应用层与数据层之间。
  3. 本地缓存,位于应用层,在应用中直接实现。
  • 缓存并不能解决所有问题,一般适应于读多写少的场景,数据最好带有热点属性。缓存会带来系统的复杂性,并且可能会出现数据不致的性况。会带来一定的运维成本。在系统的设计中,需要全局考虑,才能带来优势最大化的效果。

推荐阅读
author-avatar
用户cnhr0qjy0s
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有