分解单块系统关键是接缝接缝 -> 限界上下文
分解单块系统的原因
改变的速度
团队结构
安全
技术
杂乱的依赖数据库
打破外键关系
共享静态数据
共享数据
共享表
事务边界
再试一次
终止整个操作
分布式事务
分布式事务很容易出错,而且不利于扩展。这种通过重试和补偿达成最终一致性的方式,会使得定位问题更加困难,而且有可能需要其他的补偿措施来修复潜在数据的不一致。...
Continue reading
微服务领域驱动设计 : 用代码呈现真实世界的重要性,并且告诉我们如何更好地进行建模
持续交付理论 : 告诉我们如何更有效及更高效地发布软件产品,并指出保持每次提交均可发布的重要性
六边形架构理论 :
参考:http://www.cnblogs.com/Leo_wl/p/4418663.html
什么是微服务微服务就是一些协同工作的小而自治的服务。
服务应该多小
微服务将单一职责原则应用在独立的...
Continue reading
Continue reading
总结微服务的原则
围绕业务概念建模
使用限界上下文来定义可能的领域边界。
接受自动化文化
自动化测试必不可少,因为相比单块系统,确保我们大量的服务能正常工作是一个更复杂的过程。调用一个统一的命令行,以相同的方式把系统部署到各个环境是一个很有用的实践,这也是采用持续交付对每次提交后的产品质量进行快速反馈的一个关键部分。
隐藏内部实现细节
选择与技术无关的API
让一切都去中心化
确保...
Continue reading
Continue reading
规模化微服务拥抱故障
非功能需求
响应时间/延迟
可用性
数据持久性
功能降级对于每个使用多个微服务的面向用户的界面,或每个依赖多个下游合作者的微服务来说,你都需要问自己:“如果这个微服务宕掉会发生什么?”然后你就知道该做什么了。
架构性安全措施正确地设置超时,实现舱壁隔离不同的连接池,并实现一个断路器 ,以便在第一时间避免给一个不健康的系统发送调用。
反脆弱的组织混乱猴子(Chaos M...
Continue reading
Continue reading
演化式架构师不准确的比较架构师的一个重要职责是,确保团队有共同的技术愿景,以帮助我们向客户交付他们想要的系统。在某些场景下,架构师只需要和一个团队一起工作,这时他们等同于技术引领者。在其他情况下,他们要对整个项目的技术愿景负责,通常需要协调多个团队之间,甚至是整个组织内的工作。
软件并没有类似这种真正的工程师和建筑师在物理规则方面的约束,事实上,我们要创造的东西从设计上来说就是要足够灵活,有很好的...
Continue reading
Continue reading
集成理想集成技术的条件
避免破坏性修改
有时候,对某个服务做的一些修改会导致该服务的消费方也随之发生改变。但是我们希望选用的技术可以尽量避免这种情况的发生。比如,如果一个微服务在一个响应中添加了一个字段,那么已有的消费方不应该受到影响。
保证 A P I 的技术无关性
保证微服务之间通信方式的技术无关性是非常重要的。这就意味着,不应该选择那种对微服务的具体实现技术有限制的集成方式。
使你的...
Continue reading
Continue reading
康威定律和系统设计康威定律 任何组织在设计一套系统(广义概念上的系统)时,所交付的设计方案在结构上都与该组织的沟通结构保持一致。
松耦合组织和紧耦合组织紧耦合组织的一个例子是商业产品公司,他们的员工都在一起工作,并有着一致的愿景和目标;而松耦合组织的典型代表是分布式开源社区。
组织的耦合度越低,其创建的系统的模块化就越好,耦合也越低;组织的耦合度越高,其创建的系统的模块化也越差。
服务所有权服务所...
Continue reading
Continue reading
如何建模服务什么样的服务是好服务松耦合 和 高内聚
限界上下文限界上下文 一个由显式边界限定的特定职责
共享的隐藏模型对 于 MusicCorp 来说,财务部门和仓库就可以是两个独立的限界上下文。
有时候,同一个名字在不同的上下文中有着完全不同的含义。比如,退货表示的是客户退回的一些东西。在客户的上下文中,退货意味着打印运送标签、寄送包裹,然后等待退款。在仓库的上下文中,退货表示的是一个即将到来的...
Continue reading
Continue reading
测试测试类型
测试范围
对于用户界面测试,接下来我们改称它为端到端测试。
单元测试
TDD (Test-Driven Design ,测试驱动开发)
单元测试是帮助我们开发人员的,是面向技术而非面向业务的。
服务测试
服务测试是绕开用户界面、直接针对服务的测试。在独立应用程序中,服务测试可能只测试为用户界面提供服务的一些类。对于包含多个服务的系统,一个服务测试只测试其中一个单独服务的功能。...
Continue reading
Continue reading
部署CI - Continuous Integration , 持续集成
你是否每天签入代码到主线?
你是否有一组测试来验证修改?
当构建失败后,团队是否把修复CI当作第一优先级的事情来做?
## 构建流水线和持续交付
CD - Continuous Delivery ,持续交付
构建流水线可以很好地跟踪软件构建进度:每完成一个阶段,就离终点更近一步。流水线也能够可视化本次构建物的软件质...
Continue reading
Continue reading