- 微服务的产生
- 微服务原理
- 微服务的实践
- 微服务其他
微服务的产生
SOA解决的三个问题:
- 信息孤岛
- 互联互通
- 业务重用
微服务框架
简称:MSA
特征:
- 由一组小的服务组成一个完整的应用(或网站)
- 每个服务围绕一个相对独立的业务领域(领域模型)构建
- 服务之间通过轻量级的通信机制相互沟通
- 完全去中心化
- 每个服务都可以独立无数
- 每个服务可以使用不同的编程语言实现
发展历程:
- 单体程序
- Pre-SOA(紧耦合)
- Traditional SOA(松耦合)
- Microsevices(解耦和)
SOA和微服务的区别:
微服务不再强调传统SOA架构里面比较重的ESB企业服务总线
SOA的思想进入到单个业务系统内部实现真正的组件化
SOA和微服务的共同点:
服务化
敏捷快速
架构设计发展:
- MVC(视图、业务逻辑前后端分离)
- SOA(大型系统分层解耦)
- Micro services (云计算产物,关注敏捷交付)
最大优点:
所有功能(服务)可以单独小应用部署,实现真正意义上的“横向扩充”(理论上对服务进行各种方式单独或组合部署),解决“数据
库瓶颈”、”不同模块(服务)对硬件资源冲突的隔离因为独立,所以可以快速迭代,易部署
功能:
服务自动注册:
(1)告诉API网关有这么一个服务可以对外供调用了
(2)自动加入复杂均衡副本机制
服务优雅降级,与”服务自动注册”相反
负载均衡
流量管控、访问黑名单机制
基于容器(如Docker)小应用(AP)部署
提供一个总服务来对其他服务进行组合调用(对组合中成员实现同步执行、异步执行机制)
实现分布式事务
微服务的实现
微服务架构工作流程:
- 设计阶段:
- 将产品功能拆分为若干服务
- 为每个服务设计API接口
- 开发阶段:
- 实现API接口(包括单元测试)
- 开发UI原型(页面)
- 测试阶段:
- 前后端集成
- 验证产品功能
- 部署阶段
- 发布测试环境
- 发布生产环境
基础知识:
- 领域驱动设计(Domain Driven Design)
DDD是一种以领域为核心的设计和开发理念。DDD通过维护一个深度反映领域概念的模型,以及提供了可行的经过实践检验的大梁模型来硬度领域的复杂性,偏向代码实现的(领域)对象。
Restful API 的设计
一种开发框架:
- Java
- .NET
- Node.js
- Python
- Ruby
微服务与GRASP
微服务与GRASP基本原则
微服务主要技术
- Dubbo(开源分布式服务框架):
阿里公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能
Remoting:网络通信框架,实现了sync-over-async和Logo request-response消息机制
RPC:一个远程过程调用的抽象,支持复杂均衡、容灾和集群功能
Registry:服务目录框架用于服务的注册和服务时间发布和订阅
- Spring Cloud:
一系列框架的有序集合:
- 利用Spring Boot的开发便利性
- Spring Cloud Eureka(服务治理)
- Spring Cloud Netflix(服务发现、注册、负载就能、断路器、REST客户端、请求路由)、
- Spring Cloud Zookeeper (注册中心)
- Spring Cloud Bus (实现可靠消息)
- Spring Cloud Config (将配置信息中央化保存)
- Spring Cloud Security (实现服务安全)
- Docker:
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可一直的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
应用场景:
- 使应用的打包与部署自动化
- 创建轻量、私密的PAAS环境
- 实现自动化测试和持续的集成/部署
- 部署与扩展webapp、数据库和后台服务
优势:
- jenkins:
是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成编程可能。
功能:
- 持续的软件版本发布/测试项目
- 监控外部调用执行的工作
微服务应用平台总体架构
微服务应用平台运行架构
微服务应用设计原则
AKF扩展拆分
前后端分离
无状态服务
Rest通讯风格
服务之间选择轻量级的通信协议
选择编程语言
服务的独立部署
服务的去中心化
解决大量微服务引入的运维成本
微服务扩展知识
微服务带来挑战:
- 依赖服务接口变更
- 服务接口如何管理
- 接口变更跟踪难
- 依赖服务调试麻烦
- 部分模块重复构建
- 安全认证
- 配置日志
- 分布式带来的问题
- 分布式事务问题
- 依赖服务不稳定’
- 需要引入异步模式
- 运维复杂度陡增
- 部署物数量倍增
- 监控进程倍增
- 故障定位难
- 问题追溯难
关键问题:
服务注册和路由
安全认证
集中配置
分布式事务
同步调用
用异步模拟来同步