加入收藏 | 设为首页 | 会员中心 | 我要投稿 广安站长网 (https://www.0826zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

深度介绍分布式系统原理

发布时间:2021-02-19 16:10:24 所属栏目:动态 来源:互联网
导读:随着对充血模型的领域认知的加深,我越加感觉到DDD的重要性。但是DDD内容繁多,是不是要深入去了解呢,我觉得不必入坑太深,个人浅见,它最核心的一点就是针对贫血模型的不足而设计,把原先传统的贫血模型里的业务逻辑层拎出来,融入到Domain层,这样面对复

随着对充血模型的领域认知的加深,我越加感觉到DDD的重要性。但是DDD内容繁多,是不是要深入去了解呢,我觉得不必入坑太深,个人浅见,它最核心的一点就是针对贫血模型的不足而设计,把原先传统的贫血模型里的业务逻辑层拎出来,融入到Domain层,这样面对复杂业务的规模化变更,我们只需要专注于Domain即可。

回到主题,我们要了解的是微服务和DDD到底有什么关系呢?

因为在互联网时代,软件所面临的问题域比以往要复杂得多,这种复杂性来源于不断扩展的问题域自身,也来源于创新变化,以及这种规模性增长所带来的挑战。

然而一个人一个团队,他对复杂的事物的认知是有极限的,面对这种复杂问题唯一的方法就是分而治之。分主要考虑的是如何去分;治意味着分出来的每一个部分要能够独立的运行,能够互相的协作,完成整体的目标,能够一来应对外部变化所带来的冲击。

微服务的缺陷

微服务架构在分和治两个方面都给出了很好的理论指导和最佳实践,那微服务是不是解决复杂问题的银弹呢?其实不然,很多团队在应用了微服务架构来构建他们的系统以后,发现并没有完全解决这种复杂性问题,甚至还带来了一些其他的问题。比如服务并 没有解决复杂系统如何应对需求变化这个问题 ,甚至还加剧了这个问题。当一个需求变化了,需要花大量的精力去识别这个变化影响到了哪些微服务,这些服务的多个团队之间,需要通过无休止的扯皮去决定 哪个服务多一些,哪些服务少改一些 ,然后测试团队还需要做昂贵的这种联调测试,即便如此呢,开发团队依然不放心,还要通过一系列的开关控制,小心翼翼的去做切流,去做灰度发布。

从业务层面来看,微服务架构没有避免这种散弹式的修改。甚至反而加重了他,这是为什么呢?一个重要的原因是得微服务架构在分的纬度考虑的并不全面。

DDD功用

当我们去做分的这种工作的时候,具体拆分详见我的另外一篇文章《微服务的拆分姿势》,需要考虑哪些维度呢?我觉得我们至少要考虑三个维度:

  • 功能纬度
  • 质量纬度,比如性能,可用性
  • 工程纬度

微服务对第2个给出了很好的指导,对第3个也给出了一些建议。但是, 对第1个功能纬度只给出来非常有限的指导 ,就是为什么随着微服务的流行,领域驱动设计(DDD)又被重新重视起来的原因。

DDD弥补了微服务在 功能划分 方面没有给出很好指导的缺陷。所以他们在面对复杂问题和构建系统时候是一种 互补 的关系,在系统拆分的时候可以很好的协作。

只是他们看待系统拆分这个角度是


 

Memcached 将多台服务器构成一个缓存集群,缓存数据存储在每台服务器的内存中。事实上,使用缓存的应用程序服务器通常也是以集群方式部署的,每个程序需要依赖一个Memcached 的客户端 SDK,通过 SDK 的 API 访问 Memcached 的服务器。

应用程序调用 API,API 调用 SDK 的路由算法,路由算法根据缓存的 key 值,计算这个key 应该访问哪台 Memcached 服务器,计算得到服务器的 IP 地址和端口号后,API 再调用 SDK 的通信模块,将

那么,路由算法又是如何计算得到 Memcached 的服务器 IP 端口呢?比较简单的一种方法,和 Hash 算法一样,利用 key 的 Hash 值对服务器列表长度取模,根据余数就可以确定服务器列表的下标,进而得到服务器的 IP 和端口。

缓存注意事项

使用缓存可以减少不必要的计算,能够带来三个方面的好处:

  1. 缓存的数据通常存储在内存中,距离使用数据的应用也更近一点,因此相比从硬盘上获取,或者从远程网络上获取,它获取数据的速度更快一点,响应时间更快,性能表现更好。
  2. 缓存的数据通常是计算结果数据,比如对象缓存中,通常存放经过计算加工的结果对象,如果缓存不命中,那么就需要从数据库中获取原始数据,然后进行计算加工才能得到结果对象,因此使用缓存可以减少 CPU 的计算消耗,节省计算资源,同样也加快了处理的速度。
  3. 通过对象缓存获取数据,可以降低数据库的负载压力;通过 CDN、反向代理等通读缓存获取数据,可以降低服务器的负载压力。这些被释放出来的计算资源,可以提供给其他更有需要的计算场景,比如写数据的场景,间接提高整个系统的处理能力。

但是缓存也不是万能的,如果不恰当地使用缓存,也可能会带来问题。

首先就是数据脏读的问题,缓存的数据来自数据源,如果数据源中的数据被修改了,那么缓存中的数据就变成脏数据了。


(编辑:广安站长网)

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

    热点阅读