加入收藏 | 设为首页 | 会员中心 | 我要投稿 阳江站长网 (https://www.0662zz.cn/)- 办公协同、云通信、区块链、物联平台、高性能计算!
当前位置: 首页 > 站长资讯 > 评论 > 正文

2021年各国6G研发速度加快

发布时间:2021-01-27 13:03:01 所属栏目:评论 来源:互联网
导读:内存操作 内存直接由 CPU 控制,也就是 CPU 内部集成的内存控制器,所以说内存是直接与 CPU 对接,享受与 CPU 通信的最优带宽。 Redis 将数据存储在内存中,读写操作不会因为磁盘的 IO 速度限制,所以速度飞一般的感觉! 最后以一张图量化系统的各种延时时间(

内存操作

内存直接由 CPU 控制,也就是 CPU 内部集成的内存控制器,所以说内存是直接与 CPU 对接,享受与 CPU 通信的最优带宽。

Redis 将数据存储在内存中,读写操作不会因为磁盘的 IO 速度限制,所以速度飞一般的感觉!

最后以一张图量化系统的各种延时时间(部分数据引用 Brendan Gregg)
 

  1. config,最外层的一些全局配置,比如web配置,消息队列配置等
  2. system,全局的工具和依赖功能,在DDD中叫做基础设施(但在非DDD实践的项目中名称太怪异了)
  3. auth,权限认证模块,比如JWT或者Spring Sercurity,这部分的设计要独立,以便后续抽离到Zuul之类的网关
  4. bc,在DDD中是限界上下文的意思(Bounded Context),我们也可以直接叫模块,这些模块有着严格的界限,可以根据请求量,拆分成相应的微服务。在上图,crm、images、order等等,都可以抽离成独立的微服务

我们把相似功能,放在modules下的单个文件夹中。如果这个功能模块比较大,我么可以在功能模块下,再进行分层设计。

比如上图,有一个商品服务,我们单独给它分配了一个目录空间goods,然后在里面又划分了dao、entity等目录;但对于Service和Controller,我们简单的放在了外层,可以看到在模块内的分配是比较灵活的。

这么做的好处是显而易见的。功能变的非常的集中,各个package之间的内容互不影响。

3. 还是不够优雅

其实,即使我们这样划分了,项目仍然会面临很大的挑战(很多DDD的书籍,会大量讨论各层的交互)。

下面分享一个我在平常使用的分层模式,兼顾高内聚和低耦合,有着良好的扩展性。
 

(2)分布式事务

单数据库可以用本地事务搞定,使用多数据库就只能通过分布式事务解决了。

常用解决方案有:基于可靠消息(MQ)的解决方案、两阶段事务提交、柔性事务等。

(3)排序、分页、函数计算问题

在使用 SQL 时 order by, limit 等关键字需要特殊处理,一般来说采用分片的思路:

先在每个分片上执行相应的函数,然后将各个分片的结果集进行汇总和再次计算,最终得到结果。

(4)分布式 ID

如果使用 Mysql 数据库在单库单表可以使用 id 自增作为主键,分库分表了之后就不行了,会出现id 重复。

常用的分布式 ID 解决方案有:

  • UUID
  • 基于数据库自增单独维护一张 ID表
  • 号段模式
  • Redis 缓存
  • 雪花算法(Snowflake)
  • 百度uid-generator
  • 美团Leaf
  • 滴滴Tinyid

这些方案后面会写文章专门介绍,这里不再展开。

(5)多数据源

分库分表之后可能会面临从多个数据库或多个子表中获取数据,一般的解决思路有:客户端适配和代理层适配。

业界常用的中间件有:

  • shardingsphere(前身 sharding-jdbc)
  • Mycat

总结

如果出现数据库问题不要着急分库分表,先看一下使用常规手段是否能够解决。

分库分表会给系统带来巨大的复杂性,不是万不得已建议不要提前使用。作为系统架构师可以让系统灵活性和可扩展性强,但是不要过度设计和超前设计。在这一点上,架构师一定要有前瞻性,提前做好预判。大家学会了吗?


(编辑:阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读