.Net Core下的GC(微服务架构)
微服务架构
2012年出现-2014年关注-2015年元年-2020年必备
单体架构Monolithic
单体应用时代:应用程序就是一个项目,在一个进程里面运行。
- 优点:开发简单,集中管理,没有分布式的损耗
- 缺点:不好维护,升级困难,无法快捷迭代
垂直拆分
垂直拆分,独立不上诉和维护,分而治之。拆分越多,存储越复杂,系统重复的东西也越多(日志,登录,支付 等)。
垂直拆分后,还是单体模式-单体思维
分布式服务
- 一系列服务组装成系统
- 独立部署,独立运行
- 独立开发和维护
- 分布式管理
- 强调隔离性
被迫分布式后,会出现代价。分布式技术成熟之后,反过来,在程序架构设计时,分布式就成了可选的手段
微服务架构
微服务i架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。
概念:把一个大型的单应用程序和服务拆分为数个甚至数十个的支持微服务,它可以扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,是产品变得更加简单。
本质:用一些功能比较明确、业务比较精炼的服务去解决更大、更实际的问题。
说白了微服务架构是一个用分布式服务拆业务逻辑,完成解耦的架构模式
微服务肯定时分布式的一种,是在分布式技术成熟之后,然后把分布式当成解耦手段来架构系统–是因为拆分服务器细致
SOA面向服务架构
Service-Oriented Architecture 面向服务架构:是一个组件模型,他将应用储层徐的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来
SOA为了重用,微服务是为了重写
SOA更水平,微服务时垂直的
SOA自上而下,微服务自下而上
微服务架构基础
服务的高可用(不能挂)
服务的可伸缩(处理能力动态增加,动态减少)
(必须)集群(负载均衡):多台服务器做相同的事,共同承载压力
微服务架构核心
服务发现,调用方如何发现服务
负债均衡,如何调用服务
-
集中式代理-Nginx
对于客户端而言,我只找Nginx,由Nginx服务发现(人工配置)
-
客户端嵌入-Cinsul
负债均衡
服务注册与发现
健康检查优点:功能强大,自动发现-自动下线
缺点:客户端集成复杂(负载均衡在客户端实现)
服务网格-Service Mesh
主机+代理
Microservice 发展
1.0服务注册/服务发现
2.0熔断、限流、降级等服务治理
3.0 Service Mesh
微服务2.0架构 服务治理-网关Gateway
网关Gateway架构更简单,让下层服务实例进行映射,保护服务实例,解决路由问题,服务实例屏蔽问题,完成各种服务治理功能。consul解决服务集群问题
网关Gateway服务治理
缓存:保存结果,直接重用
熔断:单位时间内异常多少次,就指定时间内,网关直接返回失败
限流:单位时间内流量只允许多少次
降级:是指在特殊情况下,可以降低服务等级,甚至关闭
践行微服务架构-进程通信
- 共享存储
Redis/DB/Queue/硬盘文件
- 服务通信
WebService/WCF/WebApi/ashx/aspx
- 进程通信-RPC
RPC-Remote Procedure Call
.Net Remote:.Net平台独有的,不支持跨平台
gRPC:高性能/开源和通用的RPC框架,面向服务端和移动端,基于HTTP/2设计
践行微服务架构-瞬态故障处理
Polly是一种.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略。
践行微服务架构-分布式追踪SkywalKing
分布式追踪和APM的Server端,它将包含Collector,Storage,独立的Web U,并使用Open Tracing规范来设计追踪数据。
践行微服务架构-Exceptionless
Exceptionless:开源的日志收集和分析框架能为应用程序提供实时错误、特性和日志报告。
践行微服务架构-配置中心
Apollo:配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
践行微服务架构-分布式锁
单进程下,多线程操作同一个对象,可以用lock锁保证只有一个线程能进入
多进程(分布式)下,如何保证该对象在任意时刻只能一个线程进入呢?
变量A是有状态的,不同服务器进程内
跨进程的互斥机制来控制共享资源的访问,这就是分布式锁
践行微服务架构-分布式事务
保证所有的微服务都成功,或者都失败,保证数据一致性
CAP理论
践行微服务架构-容器化
Docker是一个开源的应用容器引擎,可以打包应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows机器上,也可以实现虚拟化。
践行微服务架构-容器编排K8S
Kubernetes编排容器,是管理应用的全生命周期的工具,从创建应用/部署,应用提供服务,扩容缩容,更新,都非常的方便,而且可以做到故障自愈。
践行微服务架构-CI/CD持续集成
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。