总结微服务的原则
围绕业务概念建模
使用限界上下文来定义可能的领域边界。
接受自动化文化
自动化测试必不可少,因为相比单块系统,确保我们大量的服务能正常工作是一个更复杂的过程。调用一个统一的命令行,以相同的方式把系统部署到各个环境是一个很有用的实践,这也是采用持续交付对每次提交后的产品质量进行快速反馈的一个关键部分。
隐藏内部实现细节
选择与技术无关的API
让一切都去中心化
确保...
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
上下文无关文法上下文无关文法(context-free grammar) ,它能够描述某些应用广泛的具有递归结构特征的语言。
语法分析器(parser) ,它在生成编译代码或解释程序执行前,提取出程序的语义。
与上下文无关文法相关的语言集合称为 上下文无关语言(context-free language) 。
上下文无关文法概述上下文无关文法的形式化定义上下文无关文法 是一个4元组$(V,Σ,R,...
Continue reading
Continue reading
安全身份验证和授权当我们抽象地讨论进行身份验证的人或事时,我们称之为主体(principal)
SSO (Single Sign-On,单点登录)
服务间的身份验证和授权在边界内允许一切。
HTTP(S)基本身份验证用户名和密码泄露
HTTP之上的HMACOAuth规范的一部分,并被广泛应用于亚马逊AWS的S3API。
使用HMAC,请求主体和私有密钥一起被哈希处理,生成的哈希值随请求一起发送。然...
Continue reading
Continue reading