x86市场的破局者,以实力赢未来
拆分案例 接下来结合DDD和微服务来拆分一个复杂系统。 关于领域 我们称企业的 业务范围 和在这个范围里进行的 活动 为领域,和软件系统无关。领域会分成多个子域,比如我们一个电商系统,会有:
在不同的子域里,不同的概念有不同的含义。所以我们在进行领域建模的时候,必须要有一个明确的 领域边界 ,也就是DDD里称做的 限界上下文 ,它是 系统内部的一个 架构边界 ,决定了这个系统架构。 划分系统内部架构边界 架构简洁之道这本书里边就说过:『系统架构是由系统的内部架构边界以及边界之间的依赖关系所决定的,与系统中各个组件之间的通信和调用的方式是无关的』。我们常说的微服务的服务调用本身只是一种比函数调用方式成本稍高的,分割应用程序行为的一种形式,系统架构无关。 所以,复杂系统划分的 第一重要 的是要 划分内部的架构边界 ,即划分清楚这个上下文,以及明确他们之间的关系,这对应于我们之前说的功能的维度。这正是DDD用武之处。其次我们才考虑基于非功能的维度如何划分,这是微服务能够发挥其优势的地方。
举个例子,我们把系统分成ABC三个个上下文,三个上下文的代码可以在一个部署单元里运行,通过进程内调用来完成操作,这就是典型的单体架构; 主要解决办法有两个,一个是过期失效,每次写入缓存中的数据都标记其失效时间,在读取缓存的时候,检查数据是否已经过期失效,如果失效,就重新从数据源获取数据。缓存失效依然可能会在未失效时间内读到脏数据,但是一般的应用都可以容忍较短时间的数据不一致,比如淘宝卖家更新了商品信息,那么几分钟数据没有更新到缓存,买家看到的还是旧数据,这种情况通常是可以接受的,这时候,就可以设置缓存失效时间为几分钟。 另一个办法就是失效通知,应用程序更新数据源的数据,同时发送通知,将该数据从缓存中清除。失效通知看起来数据更新更加及时,但是实践中,更多使用的还是过期失效。 此外,并不是所有数据使用缓存都有意义。在互联网应用中,大多数数据访问都是有热点的,比如热门微博会被更多阅读,热门商品会被更多浏览。那么将这些热门的数据保存在缓存中是有意义的,因为缓存通常使用内存,存储空间比较有限,只能存储有限的数据,热门数据存储在缓存中,可以被更多次地读取,缓存效率也比较高。 相反,如果缓存的数据没有热点,写入缓存的数据很难被重复读取,那么使用缓存就不是很有必要了。 总结 缓存是优化软件性能的杀手锏,任何需要查询数据、请求数据的场合都可以考虑使用缓存。缓存几乎是无处不在的,程序代码中可以使用缓存,网络架构中可以使用缓存,CPU、操作系统、虚拟机也大量使用缓存,事实上,缓存最早就是在 CPU 中使用的。对于一个典型的互联网应用而言,使用缓存可以解决绝大部分的性能问题,如果需要优化软件性能,那么可以优先考虑哪里可以使用缓存改善性能。
除了本文提到的系统架构缓存外,客户端也可以使用缓存,在 App 或者浏览器中缓存数据,甚至都不需要消耗网络带宽资源,也不会消耗 CDN、反向代理的内存资源,更不会消耗服务器的计算资源。 (编辑:广安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |