推广 热搜: page  使用  音视频  个数  选择  搜索引擎  企业  百度  可以  父亲 

WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

   日期:2024-12-30     作者:7hpoo    caijiyuan   评论:0    移动:http://ww.kub2b.com/mobile/news/16286.html
核心提示:最近出于工作需要,了解了一下微服务架构(,MSA)。我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NE

最近出于工作需要,了解了一下微服务架构(,MSA)。我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架构的应用程序案例,并结合领域驱动设计(DDD)以及命令查询职责分离(CQRS)体系结构模式,对事件驱动的微服务系统架构进行了一些实战性的探索。现将自己的思考和收获整理成文,分享给大家。

在介绍源代码之前,我还是想谈谈微服务架构,虽然网上有很多有关微服务架构的讨论,但我觉得在此再多说一些还是有必要的。大师级人物Martin Fowler在他谈论微服务的个人主页上提到,微服务并没有一个非常明确的定义。事实上有很多种分布式系统的实现都可以被看成(或者说勉强看成)是面向微服务架构的。就我个人而言,我觉得微服务架构应该满足以下几个特征:

相比传统的一体化架构系统,微服务架构系统有着以下一些优势:

WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

当然,它也有一些不足:

有关微服务架构的内容暂时就写这么多吧,微服务架构现在比较火爆,大家也可以直接上网查阅相关资料,英语比较好的朋友建议直接上英文网站去搜索学习,有很多精华文章和精彩讨论。架构本身就是仁者见仁智者见智,不同的人有不同的理解,产生了不同的观点,有些观点可能在有些场景下更为合适,但换个场景又体现了它的弱势。但不管怎样,我想说的是,无论选择什么架构,它总有优缺点,架构设计的难处就在于如何选择最为合适的模式、方法、技术来完成一整套系统开发的解决方案。更多情况下,整个应用系统更有可能是融合了多种技术多种架构风格的“生态圈”。对于你现在正在开发的项目,或许使用经典的三层架构最为合适。

有理论还需要实践。为此,我花了两周的业余时间,使用Visual Studio 2015开发了一个案例项目:。这个案例项目的业务还是很简单的:用户可以注册、登录,登录后可以修改个人信息,然后可以创建一些自己的Text(就是含有标题和文本内容的小笔记),还可以发送加好友申请给其他用户,等对方接受邀请后,可以将自己的Text分享给对方。到我写本文为止,Text分享部分还没有完成,但其它业务部分基本已经走通,可能还有不少Bug。

看到这里,你肯定会要吐槽了,这么简单的系统还需要花两周,搞出这么大动静,还有这么多Bug,居然还没搞完!是的,目前还不太完善,为什么?因为架构复杂,我是边思考边设计边Coding,或许使用CQRS的微服务架构并不适合这样的应用系统,甚至DDD也未必有用武之地。在这个项目上采用这么个架构风格,老实说,我只是为了实践一下。到目前为止,这个项目还有以下不足之处,还请各位读者忍耐一下。当然,它是开源的(Apache 2.0 License),你觉得没有尽兴的地方也欢迎参与讨论和贡献,提交Pull Request给我就行了。

首先,让我们从整体架构角度来了解一下WeText项目的整个结构,以及它所包含的各个组件。

上图中,蓝色部分表示与领域相关的概念,诸如聚合、规约、事件、Saga、仓储等;黄色部分表示微服务,目前有Accounts、Texting以及Social三个微服务;灰色部分表示基础结构层设施,包括基于Owin的Web API宿主程序、消息队列、Event Store以及数据库等;浅粉红色色块表示一个服务宿主进程(Service Host)。

对于Service Host,在上图中它同时为三个服务实例提供了宿主环境。事实上,WeText的设计允许Service Host仅宿主其中的某个或者某几个实例,而多个Service Host又可以被部署到多个不同的物理机器上,例如:

于是,在整个环境中,我们有一个Accounts服务实例、两个Texting服务实例和两个Social服务实例。至少在单点失败和服务器资源平衡方面提供了解决方案,当然也带来了不少问题。比如:

这些问题我会在后续文章中讨论。

另外,你会认为基础结构层设施存在单点失败可能,比如RabbitMQ或者数据库。其实这些成熟的产品都有自己的解决方案,比如做数据库集群。或者干脆直接使用AWS或者Azure提供的PaaS服务(消息队列、存储等)。因此,解决这个问题并不困难。

为了能够更好地了解WeText整个项目的架构和所使用的技术,建议提前对以下内容做些了解:

接下来,重要的事情,算了,就说一遍吧,请使用git将项目代码克隆到本地:

然后直接使用Visual Studio 2015打开WeText.sln文件即可。打开代码后,先别急着运行,让我们先了解一下项目结构。

首先,WeText仅依赖于一些基础结构层设施所需的相关库,包括:

除此之外,没有使用任何应用层的开发框架和代码库,所有的代码都是原创并且包含在整个WeText的解决方案中。

其次,服务端基础结构层完全选用诸如Owin、MySQL、RabbitMQ、PostgreSQL等这些能够跨平台的项目和产品,如此一来整个WeText服务端能够完全部署在Linux环境中(其实这也是我想实践的一个部分,验证基于Mono的.NET服务器程序在Linux系统中是否有出色的表现)。没有使用SQL Server、Entity framework这些目前更适合运行于Windows平台的产品。

首先,为了方便起见,强烈建议将所有的服务和程序安装在同一台机器上。请按以下步骤准备系统环境:

环境准备好之后,就可以试着启动项目了。

在Windows系统中启动并调试项目

在Linux中编译并启动服务器程序

注意:我目前还没有来得及测试使用WeText.Web站点访问部署在Linux上的服务器,仅试图在Linux环境中编译和启动服务器程序。Web站点程序(WeText.Web)本身暂不打算运行于Linux环境,以后可以尝试。

本文首先简要介绍了微服务架构,并从整体架构、代码库的使用、环境准备和编译部署等方面介绍了WeText这个基于.NET实现的DDD、CQRS和微服务架构的演示案例。对微服务感兴趣的朋友欢迎试用本案例源代码,并欢迎参与更深入的探讨。WeText目前还是不太成熟,我也会逐步去完善这个案例,同时也会在此过程中分享自己的心得体会,欢迎大家关注。

本文地址:http://ww.kub2b.com/news/16286.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号