集成理想集成技术的条件
避免破坏性修改
有时候,对某个服务做的一些修改会导致该服务的消费方也随之发生改变。但是我们希望选用的技术可以尽量避免这种情况的发生。比如,如果一个微服务在一个响应中添加了一个字段,那么已有的消费方不应该受到影响。
保证 A P I 的技术无关性
保证微服务之间通信方式的技术无关性是非常重要的。这就意味着,不应该选择那种对微服务的具体实现技术有限制的集成方式。
使你的...
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
监控多个服务的指标跟踪Graphite之类的指标跟踪工具
服务指标暴露一切数据,然后依靠指标系统对它们进行处理。
综合监控Nagios监控告警
使用 合成事务 来确保系统行为在语义上的正确性,这也是这种技术通常被称为 语义监控 的原因。
在运行的系统上运行这些测试的子集,作为系统语义监控的一种方式。我们可以在生产环境上设置一组假用户和一些已知的数据集,不过必须确保不会触发意料之外的副作用。
使用关...
Continue reading
Continue reading
安全身份验证和授权当我们抽象地讨论进行身份验证的人或事时,我们称之为主体(principal)
SSO (Single Sign-On,单点登录)
服务间的身份验证和授权在边界内允许一切。
HTTP(S)基本身份验证用户名和密码泄露
HTTP之上的HMACOAuth规范的一部分,并被广泛应用于亚马逊AWS的S3API。
使用HMAC,请求主体和私有密钥一起被哈希处理,生成的哈希值随请求一起发送。然...
Continue reading
Continue reading