### 前言

前几天在博客园看到有园友在分享关于微软的一个微服务架构的示例程序,想必大家都已经知道了,那就是[eShopOnContainers](https://github.com/dotnet-architecture/eShopOnContainers)。

我们先不看项目的后缀名称 OnXXX ,因为除了 OnContainers 还有 OnAzure,OnWeb,OnKubernetes 以及 OnServiceFabric。

我们就还是来先说说 eShop 这个项目吧,eShop 是 ASP.NET Core 发布之后微软新开源出来的一个示例项目,想必大家之前也都知道微软放出来的关于 Web 的示例项目还有 PetShop, Music Store 这两个项目。关于这两个项目我们就不做过多的介绍了,但是关于这两个项目的架构风格我们不得不提起。

PetShop:WebFrom 的示例程序。典型的三层架构风格的应用程序。

MusicStore: 针对于 MVC3-5 框架和 EF 的一个示例程序。无明显架构风格。

eShop: 针对于 ASP.NET Core 的示例程序。它是一个 Rest 架构风格的应用程序。

我们从微软放出来的这些示例程序中也许可以看出些许东西,那就是近些年来关于架构风格的演变,或者叫微软架构风格的演变,在这里我不打算讨论关于软件架构更加深层次的一些这种东西,我们只从我们能够理解的东西看起。

我不知道有没有人看过这本书,目前已经绝版了,它是早年间关于微软架构风格的一本指南书,里面描述了微软体系的架构风格的一些汇总。

![](http://images2015.cnblogs.com/blog/250417/201706/250417-20170630224121180-1069400365.png)

这本书中列出来了以下这些架构风格:

- Client/Server Architectural Style
- Component-Based Architectural Style
- Domain Driven Design Architectural Style
- Layered Architectural Style
- Message-bus Architectural Style
- N-Tier / 3-Tier Architectural Style
- Object-Oriented Architectural Style
- Service-Oriented Architectural Style

我们可以看到微软所开源出来的这些示例程序其实都是在遵循这些架构风格中的某一种或者是多种。 PetShop 属于 N-Trie ,Music Store 属于 Layered,eShop 属于 Service-Oriented。
当然在 eShop 中微软不但使用了 Service-Oriented ,其中还包括 Domain Driver Design(DDD), Message-bus 也都应用到了示例程序中。

由此,我们可以看出,在现代的应用程序架构风格中,已经不是某一种架构风格可以独自独领风骚了,它一定是多种架构风格的混合体,互相补充来构建更加强大的应用程序解决方案。

下面进入到我们本篇博客的主题微服务。不,应该是 ASP.NET Core 中的微服务,有同学可能会说了,微服务是一种架构风格,它并不和某一种语言相关,也不是只有.NET 中才有微服务。在这里我想说的是我不想去讨论大众眼中的微服务,因为太多人去说这些东西了,不就你打开 InfoQ 或者 cnBeta 这些网站,满屏的都是微服务的东西。 所以你可以说我的微服务叫 Savorboard 式微服务。

既然要说 ASP.NET Core 中的微服务,那就必须又要说到 eShop 这个项目了,之前没有给大家分享关于 eShop 这个项目的一些信息其实是有原因的,因为这个项目有很多东西它没有实现完,或者是叫它还是一个半成品,给大家分享的话大家又运行不起来,所以就一直在等一个合适的时间来做。

ASP.NET Core 其实是一个非常适合做微服务的一个 Web 框架,它足够的轻量级并且拥有超高的性能。并且对于 Rest 这些风格的接口支持的非常的友好。更多好处我其实不太愿意去说,因为只有你自己去体会才会知道。还不如来点实在的,去教你们怎么在 ASP.NET Core 中构建一个或者叫一组微服务集群。在我看来,有时候讲那么多理论也都是扯淡的。那就废话不多说,开始吧。

### 步骤

在开始之前还是要说一句,你的架构一定要符合你的业务和需求,不要为了架构而架构。举个例子,你的网站每天的访问量就那么几百号人,以后也不会大量的增加,你又是分布式又是大数据又是docker集群的这不没事给自己找事干么。切记。

**第一步,业务拆分。**

业务拆分其实有时候是需要经验积累的,有时候不仅仅是需要你有软件架构经验,还需要你有行业知识的经验。这时候你的业务拆分的才足够合理,不会随着时间的推移导致你的微服务变“大”。

如果你对 DDD 中领域建模这种软件建模方式在行的话可能会帮助你解决大量的潜在问题,如果你不会也没关系,因为你可以去学呀~ 2333

**第二步,建模。**

在微服务架构中,建模仍然是重要的一步,因为你使用的是 EF Code First , 建模质量的好坏肯定是和你以后的代码质量挂钩了。如果你不使用 EF,那我们就不能愉快的做朋友了。

给大家个小提示,如果你的项目中全是增删改查,没有什么业务算法或者逻辑可言的话,就让你的模型尽量的符合你的界面上的显示字段,这样可以最大化的提升开发效率。

**第三步,写代码。**

这个时候我希望你抛弃掉三层架构这种架构风格的设计,不是说那种不好,而是有更加便捷的方式了,你需要知道,你写的每一个 Action 都应该是尽量的简单,再去调用 BLL 层绕一大圈子就为了一个增删改查纯粹是给自己找活干,那样并没有提高项目的可维护度。

前段时间在 QQ 群听学姐说过这么一句话,就是佛家的人生三重境界之说, 即:“看山是山, 看水是水; 看山不是山, 看水不是水; 看山还是山, 看水还是水。”

这一句话对于软件架构的设计过程中同样适用,在最初的时候,我们对于软件程序不懂就按照官方给的示例程序来进行设计,即看山是山;随着我们的知识,见解,经验的积累我们有了自己的一些看法理解,出了自己的各种框架,即看山不是山;随着时间的推移,我们已经悟到了其中的精髓,又回到了官方示例,大道至简,即看山还是山。

我眼中的ASP.NET Core之微服务的更多相关文章

  1. 我眼中的ASP.NET Core之微服务 (二)

    前言 接上一篇. 上一篇未完待续的原因是当时刚好是6-30号晚上马上12点了还没写完,然后我想赶在7月1号之前发出去,所以当时就发了.然后在发的时候出了一点问题,结果发出去的时候刚好是 7.1号 00 ...

  2. ASP.NET Core OceLot 微服务实践

    1.OceLot中间件介绍 在传统的BS应用中,随着业务需求的快速发展变化,需求不断增长,迫切需要一种更加快速高效的软件交付方式.微服务可以弥补单体应用不足,是一种更加快速高效软件架构风格.单体应用被 ...

  3. [目录] ASP.Net Core 搭建微服务网站

    本项目采用ASP.Net Core微服务技术,搭建博客和Saas平台. 全文将围绕(1)设计模式  (2)敏捷开发 目的: 结构足够合理,代码足够优美,扩展性.可读性.易维护性做到最优. 以下目录仅为 ...

  4. .Net Core with 微服务 - Ocelot 网关

    上一次我们通过一张架构图(.Net Core with 微服务 - 架构图)来讲述了微服务的结构,分层等内容.从现在开始我们开始慢慢搭建一个最简单的微服务架构.这次我们先用几个简单的 web api ...

  5. .Net Core with 微服务 - Consul 注册中心

    上一次我们介绍了 Ocelot 网关的基本用法.这次我们开始介绍服务注册发现组件 Consul 的简单使用方法. 服务注册发现 首先先让我们回顾下服务注册发现的概念. 在实施微服务之后,我们的调用都变 ...

  6. .Net Core with 微服务 - Seq 日志聚合

    上一次我们介绍并演示了如果使用 Consul 做为我们微服务的注册中心,来实现服务的注册与发现.那么本次我们讲会演示如何做日志聚合.日志聚合比较常用的有 ELK 等,但是这次我想要介绍的是一款比较小众 ...

  7. .Net Core with 微服务 - Elastic APM

    上一次我们介绍了Seq日志聚合组件.这次要给大家介绍的是Elastic APM ,一款应用程序性能监控组件.APM 监控围绕对应用.服务.容器的健康监控,对接口的调用链.性能进行监控.在我们实施微服务 ...

  8. .Net Core with 微服务 - Polly 服务降级熔断

    在我们实施微服务之后,服务间的调用变的异常频繁.多个服务之间可能是互相依赖的关系.某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败.某一个服务调用失败轻 ...

  9. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

随机推荐

  1. ConcurrentSkipListMap深入分析

    1.前言 ConcurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSki ...

  2. mac Ubuntu 设置快捷进入目录

    在我们实际工作中,好多时间需要经常性的进入某个目录查看文件等等之类的操作. 好多时候我们都是在终端一级一级的进入目录,相比较Windows的快捷方式有点繁琐. 废话少说,下面就是设置快捷方式的方法: ...

  3. Java 多线程详解(一)------概念的引入

    这是讲解 Java 多线程的第一章,我们在进入讲解之前,需要对以下几个概念有所了解. 1.并发和并行 并行:指两个或多个时间在同一时刻发生(同时发生): 并发:指两个或多个事件在一个时间段内发生. 在 ...

  4. javase基础回顾(四) 自定义注解与反射

    本篇文章将从元注解.自定义注解的格式.自定义注解与反射结合的简单范例.以及自定义注解的应用来说一说java中的自定义注解. 一.元注解 元注解也就是注解其他注解(自定义注解)的java原生的注解,Ja ...

  5. OpenStack(企业私有云)万里长征第二步——使用Fuel部署

    一.前言 最近一直在使用DevStack来安装OpenStack,注意一直二字,部署了一遍又一遍,操作系统怕是安装了不下上百次,有时是为了验证新的方案,有时是安装出错,还有时是运行过程中出错.总之是碰 ...

  6. LindAgile.Modules模块化的设计

    在LindAgile中有一个比较主推的技术,就是模块化,一切组件都可以被抽象成一个小小的模块,而每个小模块的实现可能又有多种方式,如日志模块可以有LindLoger,Log4net等实现,而具体在程序 ...

  7. php回调函数的使用

    1.array_map — 将回调函数作用到给定数组的单元上 参数:array array_map ( callable $callback , array $arr1 [, array $... ] ...

  8. MySQL优化总结,百万级数据库优化方案

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. springboot 自定义Repository

    启用 JpaRepositories package cn.xiaojf; import cn.xiaojf.today.data.rdb.repository.RdbCommonRepository ...

  10. 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】

    一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的序列化机制,可以序列到 sqlserver,mysql,当然还可以在 ...