微服务是一种软件设计、架构思想,当然,里面也包含了相关技术点要解决当前要务。学习微服务,我们不能空口而谈,一定要落实到具体的技术栈上。当今使用比较多两个技术体系,一个是Java,另外一个就是Net,废话不多说,我是使用微软相关技术栈的软件架构人员,当然使用的“微服务”架构技术栈也都是微软的。今天我就把相关“微服务架构”所用到的技术栈罗列出来,我也要说明一下,微服务架构里面的很多技术是和开发语言无关的,无论是.Net还是Java平台都可以使用。以后,一步一步的针对每项技术在做深入研究。
1、微服务架构——服务通信
WebService、WCF、WebAPI,甚至可以是ASHX,ASPX,这都是微软本身的技术体系,没什么可说的。
-
主动触发
-
数据序列化传递
-
跨平台
-
跨语言
-
Http穿透防火墙
2、微服务架构——进程通信
3、微服务架构——API网关服务(Ocelot)
API网关——它是系统的暴露在外部的一个访问入口。这个有点像代理访问的家伙,就像一个公司的门卫承担着寻址、限制进入、安全检查、位置引导、等等功能。Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。这些功能只都只需要简单的配置即可完成。如图:
官网:https://ocelot.readthedocs.io/en/latest/index.html
4、微服务架构——认证&授权
现在的应用开发层出不穷,基于浏览器的网页应用,基于微信的公众号、小程序,基于iOS、Android的App,基于Windows系统的桌面应用和UWP应用等等,这么多种类的应用,就给应用的开发带来的挑战,我们除了分别实现各个应用外,我们还要考虑各个应用之间的交互,通用模块的提炼,其中身份的认证和授权就是每个应用必不可少的的一部分。而现在的互联网,对于信息安全要求又十分苛刻,所以一套统一的身份认证和授权就至关重要。
IdentityServer4就是这样一个框架,IdentityServer4是为ASP.NET CORE量身定制的实现了OpenId Connect和OAuth2.0协议的认证授权中间件。
项目地址:https://github.com/IdentityServer/IdentityServer4
5、微服务架构——瞬态故障处理
Polly它一款强大的类库,Polly是一种.NET弹性和瞬态故障处理库,允许我们以非常顺畅和线程安全的方式来执诸如行重试,断路,超时,故障恢复等策略。Polly针对.NET 4.0,.NET 4.5和.NET Standard 1.1以及.NET Core实现,该项目作者现已成为.NET基金会一员,项目一直在不停迭代和更新,你值得拥有。
项目地址:https://github.com/App-vNext/Polly
6、微服务架构——分布式追踪
随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响,所以会深深的感受到“银弹”这个词是不存在的,每种架构都有其优缺点。
面对以上情况,我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这时候APM(应用性能管理)工具就该闪亮登场了。
项目地址:https://github.com/SkyAPM/SkyAPM-dotnet
7、微服务架构——分布式日志
一般我们需要进行日志分析场景:直接在日志文件中grep、awk就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
Exceptionless是一个开源的实时的日志收集框架,它可以应用在基于ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC等技术栈的应用程序中,并且提供了Rest接口可以应用在Javascript,Node.js中。它将日志收集变得简单易用并且不需要了解太多的相关技术细节及配置。在以前,我们做日志收集大多使用Log4net,Nlog等框架,在应用程序变得复杂并且集群的时候,可能传统的方式已经不是很好的适用了,因为收集各个日志并且分析他们将变得麻烦而且浪费时间。
现在Exceptionless团队给我们提供了一个更好的框架来做这件事情,我认为这是非常伟大并且有意义的,感谢他们。
官网:http://exceptionless.com/
GitHub:https://github.com/exceptionless/Exceptionless
ELK是三个开源软件的缩写,分别为:Elasticsearch、Logstash以及Kibana,它们都是开源软件。不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent),Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,目前由于原本的ELK Stack成员中加入了Beats工具所以已改名为Elastic Stack。推荐使用。
8、微服务架构——分布式配置中心
Apollo(阿波罗)是携程框架部门研发的配置管理平台,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring环境也有较好的支持。
.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。
项目地址:https://github.com/ctripcorp/apollo/
9、微服务架构——分布式锁
分布式锁的解决方案有很多,我在这里就罗列一些,我会在以后的实践中实现这些技术点。
-
Consul可以实现分布式锁
-
Redis可以实现分布式锁,推荐使用。
-
ZooKeeper可以实现分布式锁
-
数据库可以实现分布式锁
10、微服务架构——分布式事务
分布式事务的实现方式也不少,以后努力学习吧。