Monolithic单体式架构指的是尽管是模块化逻辑,但是最终还是会打包并部署为一个单一应用。
基准代码
基准代码和应用之间总是保持一一对应的关系:一旦有多个基准代码,就不能称为一个应用,而是一个分布式系统。
多个应用共享一份基准代码是有悖于12-Factor原则的,解决的方法是将代码拆分为独立的类库,然后依靠依赖管理策略去加载他们。
依赖关系
应用程序不会隐式依赖系统级的类库。它一定通过依赖清单,确切地声明所有依赖项。
在运行过程中通过依赖隔离工具来确保程序不会调用系统中存在但清单中未声明的依赖项。
配置
配置写在环境变量中,可以非常方便的在不同的部署间做修改,环境变量和语言系统无关。不可能不小心嵌入代码库。
后端服务
12-Factor应用不会区别对待本地或第三方服务。两种都是附加资源。
Docker利用容器将资源进行有效隔离。
- 客户端如何访问这些服务?
APIGateway 即API网关,所有请求首先会经过这个网关,然后到达后端服务,有点类似于Facade模式。API网关作为系统接口对外的统一出口,可以减少调用方对服务实现的感知。 - 服务之间如何通信?
IPC -->同步调用REST 异步消息调用RPC - 服务怎么找?
基本都是通过zookeeper等类似技术做服务注册信息的分布式管理 - 服务挂了怎么办?
分布式一个最大的特点是:网络是不可靠的。
HYSTRIX提供高容错,如重试机制、限流、负载均衡、降级等。
hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Netflix团队将该框架命名为Hystrix,并使用了对应的卡通形象做作为logo。
在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情。Hystrix提供了熔断、隔离、Fallback、cache、监控等功能,能够在一个、或多个依赖同时出现问题时保证系统依然可用。
自测题
- 应用想要做到持续部署就必须缩小本地与线上差异。开发人员应该反对在不同环境间使用不同的后端服务,即使适配器已经可以几乎消除使用上的差异。
对 - 微服务架构每个服务都有自己的数据库,而不像传统架构下多个服务共享一个数据库。
对
- 关于微服务12要素中的“Dependences依赖”,下列哪一项理解是不正确的?
这一做法应用到生产和开发环境时可以不一致。 - 单体式应用的特点不包括下列哪一项?
每一个单体式应用的模块都是微型六角形应用,都有自己的业务逻辑和适配器。 - 微服务被定义为特定背景下,为了开发出速度更快、更有弹性且用户体验更佳的应用而采用的自动化系统,下列哪一种场景环境不适合微服务?
必须理解其他部件运作原理