浅谈微服务架构与.Net Core
微服务(microservice)这个概念是2012年出现的,2014年3月Martin Fowler在他的个人网站(https://martinfowler.com/articles/microservices.html)中是这样说到的:
The term "Microservice Architecture" has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services. While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.
“微服务架构”一词在过去几年中兴起,描述的是将软件应用程序设计为可独立部署服务套件的特定方式。虽然没有对这种架构风格的精确定义,但其具有一些共同的特性,如围绕业务能力自动化部署、智能端点、对语言及数据的“去集中化”控制等等。
通俗的讲,我们可以这样认为:传统系统的开发,我们将整个系统分为表示层、服务层、业务逻辑层、数据访问层进行开发,但最终我们将这所有的代码编译在一起发布,这样做也有它的优点,比如开发简单、不存在分布式管理,但这样也有缺点,比如:一个小的bug可能导致整个应用程序的崩溃、系统业务之间代码耦合度高不易于维护、开发不灵活,若有新的业务需求只能往原有代码上加逻辑,这样对开发团队成员要求高,若团队成员更替频繁,新成员必须先熟悉团队的开发框架,很难适应这种开发模式、还有随着系统业务增多,功能增加,数据量越来越大,更是无法满足高并发下的业务需求;若我们采用微服务架构,那就将我们整个系统拆分为多个业务,将每个业务做成一个服务,服务之间采用HTTP(也可以使用消息队列RoocketMQ,Kafaka)通信,而且每个服务可以采用不同的开发语言、使用不同的存储方式,根据不同业务的并发需求,我们可以单独对某个服务做集群部署,增强系统的负载能力,由于每个服务都是独立部署的,每个服务的修改和部署对其他服务没有影响,当然,微服务也有一些缺点,比如:代码的重复,某些底层功能需要被多个服务所用,为了避免将“同步耦合引入到系统中”,有时需要向不同服务添加一些代码,这就会导致代码重复;开发人员需要考虑分布式系统的问题,如网络延迟、异步机制、系统容错性、分布式事务等;另外运维开销及成本也会增加,微服务架构可能需要运行数十个独立的服务,并可能需要支持多种语言和环境,对运维人员的要求也比较高。
小结:微服务架构有很多吸引人的地方,在拥抱微服务之前,我们要根据团队的实际情况以及项目实际情况选择是否适合采用该架构。
.NET Core是适用于 windows、linux 和 macos 操作系统的免费、开源托管的计算机软件框架,是微软开发的第一个官方版本,具有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework),未来也将会支持 FreeBSD 与 Alpine 平台,也是微软在一开始发展时就开源的软件平台 。
由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET Core 会包含 .NET Framework 的类库,但与 .NET Framework 不同的是 .NET Core 采用包化 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 打包式安装的做法截然不同,同时各包亦有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。
.NET Core的优势:
.NET Core 3.0现在支持了WPF和Windows Forms的开发,同时还支持UWP,WPF和Windows Forms三者间的混合开发,这为开发人员提供了灵活性,可以将UWP的现有接口引入Windows窗体和WPF中。
.NET Core 更适合跨平台的开发。 .NET Core 应用支持Windows,Linux和Mac OS。微软很受欢迎的代码编辑器 Visual Studio Code 支持Windows,Linux和Mac OS。VS Code还支持智能提示和调试,许多第三方代码编辑器(如Sublime、Emacs和VI)也都是使用.Net Core开发的。
.NET Core支持微服务架构,它允许跨平台服务与.NET Core一起使用,包括使用.NET Framework、Java、Ruby或其他语言开发的服务。
.NET Core的模块化,轻量级和灵活性,使在容器中部署.NET Core应用程序变得更加容易。而容器可以部署在任何平台包括云,Linux和Windows上,. Net Core在Docker和Azure Kubernetes Service上都运行良好。
.NET Core每个版本之间的兼容性很好。你可以在同一台电脑上面同时运行不同版本的应用。