没有合适的资源?快使用搜索试试~ 我知道了~
自包含系统:打开微服务的正确方式
0 下载量 103 浏览量
2021-01-27
16:53:14
上传
评论
收藏 174KB PDF 举报
温馨提示
试读
4页
自包含系统(SCS)与微服务有很多相似的特征。它们都可以独立部署,并以解耦系统为目的。不过,SCS一般具有更粗的粒度和更精确的定义。 每一个SCS都是一个自主的Web应用,包含了WebUI、业务逻辑和持久化层。对于SCS来说,API是一个可选项,而且SCS不应该共享UI,当然,那些调用了多个服务的单页应用(SPA)除外。 在进行领域驱动设计(DDD)时,为了尽可能降低SCS之间的耦合,每个SCS都应该实现一个边界上下文
资源详情
资源评论
资源推荐
自包含系统:打开微服务的正确方式自包含系统:打开微服务的正确方式
要点
自包含系统(SCS)与微服务有很多相似的特征。它们都可以独立部署,并以解耦系统为目的。不过,SCS一般具有更粗的
粒度和更精确的定义。
每一个SCS都是一个自主的Web应用,包含了Web UI、业务逻辑和持久化层。对于SCS来说,API是一个可选项,而且SCS
不应该共享UI,当然,那些调用了多个服务的单页应用(SPA)除外。
在进行领域驱动设计(DDD)时,为了尽可能降低SCS之间的耦合,每个SCS都应该实现一个边界上下文(Bounded
Context)。可以通过对用户故事进行来定义边界上下文。
SCS之间可以通过多种方式进行交互:UI集成,如引用JavaScript文件、ESI或SSI;异步通信和事件;同步通信。
一个SCS只能由一个单独的团队进行开发。一个用户故事一般只能由一个团队来实现。SCS致力于将每一个变更都包含在单
个SCS里,所以开发效率会很高,因为不需要做太多的协调工作。
SCS可以保证一个特性只会在一个SCS里实现,因此可以单独部署到生产环境。微服务支持独立部署,但如果大多数变更要
求部署多个微服务,那么在微服务上的投入就没有多大意义。
现如今,似乎人人都在构建微服务。将一个系统拆分成微服务有很多种方式,微服务可以独立部署是一个不争的事实,但除此
之外,人们并未能对微服务做出更好的定义。很多项目都使用了自包含系统。
那么什么是自包含系统?
SCS官方网站对自包含系统进行了定义。自包含系统具有如下特征。
每个SCS都是一个自主的Web应用。因此,它会包含Web UI、业务逻辑和持久化层。实现一个用户故事通常只需要对一个
SCS进行修改,包括对UI、业务逻辑和持久化层的修改。SCS需要有自己的数据存储,这样它们就可以独立地修改自己的数
据库schema。
SCS可能会提供服务API。如果一个SCS的逻辑可能被其他系统调用,比如一个移动应用,那么这个应用就可以使用这个系统
提供的API。不过API不是必需的。如果SCS的UI是整个系统唯一的客户端,那么就不需要提供API。
SCS之间不应该共享UI。SCS要求UI、逻辑和持久化都在一个系统内实现,而且变更也只在这个系统内进行。共享UI会破坏
这种模式,因为很多变更需要对服务和共享UI做出改动。
SCS不应该共享业务代码。共享业务代码会导致服务之间发生耦合,也意味着某些场景的逻辑需要在多个SCS里实现。
一个SCS只能由一个单独的团队进行开发。一个用户故事一般只能由一个团队来实现。SCS的弱耦合可以确保不同团队可以
独立地开展工作。
为了进一步降低SCS之间的耦合度,应该尽可能最小化共享基础设施。所以,在共享一个数据库或消息系统时要格外小心:
共享基础设施的可用性决定了SCS的可用性。
如何将一个系统拆分成SCS
在进行领域驱动设计(DDD)时,为了尽可能降低SCS之间的耦合,每个SCS应该实现一个边界上下文。每个系统不只拥有
一个领域模型,事实上,一个系统可以包含多个不同的领域模型。每一个模型都有一个边界上下文。例如,在电子商务系统里
搜索产品的当前价格时,产品的描述和数量是很重要的。而如果要向客户发货,则还需要其他的信息:产品的重量和客户的收
货地址。将系统拆分成边界上下文是构建自包含系统最为有效的方式。
可以通过对用户故事进行分组来定义边界上下文。假设我们通过全文检索来搜索产品,那么通过分类和推荐来搜索也应该属于
相同的边界上下文。当然,有时候拆分并不会有非常清楚的界线,这要取决于搜索的复杂性。
在将系统拆分成SCS时也需要考虑到用户体验。用户体验描述了客户与系统之间的交互步骤,比如搜索产品、结账或注册。
每一个步骤都可能成为一个SCS。这些步骤之间一般只有很少的依赖。这些步骤之间有承上启下的关系:购物车在结账时就
变成了一个订单,然后完成支付。
SCS不只处理某种特定的领域对象。例如,使用一个SCS来处理所有的客户数据就没有多大意义:很多不同的边界上下文都
会用到客户数据。所以,为客户单独创建模型并在一个单独的SCS里实现是不可能的事情。如果真的这样子做了,那么每个
需要用到客户数据的系统都会依赖它。这也就是为什么在将系统拆分成SCS时需要通过用户故事、边界上下文或用户体验来
驱动,这种自上而下的方法会带来低耦合的系统。
虽然在后续有必要识别出公共部分,但这不应该成为关键点。公共逻辑可以被抽取到另一个系统里,但这意味着SCS会对这
个系统产生依赖,它们之间就产生了耦合。
weixin_38707217
- 粉丝: 3
- 资源: 903
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- Docker在Ubuntu16.04上安装和部署Apache Storm
- test_kong.zip
- springboot权限验证学习-下
- SeetaFace6人脸质量评估C++代码实现Demo
- OCAuxiliaryTools
- 制药公司QC顶岗实习专题报告
- Rust 全面指南:从基础到高级,一网打尽 Rust 的编程知识
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0