分享

软件各种系统架构图(二)

 long16 2019-12-28

什么是ENode

ENode是一个.NET平台下,纯C#开发的,基于DDD,CQRS,ES,EDA,In-Memory架构风格的,可以帮助开发者开发高并发、高吞吐、可伸缩、可扩展的应用程序的一个应用开发框架。

ENode框架特色

1. 一个DDD开发框架,完美支持基于六边形架构思想的开发

2. 实现CQRS架构思想,并且框架提供C端命令的处理结果的返回,支持同步返回和异步返回

3. 内置Event Sourcing(ES)架构模式,让C端的数据持久化变得通用化

4. 聚合根常驻内存,in-memory domain model

5. 聚合根的处理基于Command Mailbox, Event Mailbox的思想,类似Actor Model, Actor Mailbox

6. 严格遵守聚合内强一致性、聚合之间最终一致性的原则

7. Group Commit Domain event

8. 基于聚合根ID+事件版本号的唯一索引,实现聚合根的乐观并发控制

9. 框架保证Command的幂等处理

10. 通过聚合根ID对命令或事件进行路由,做到最小的并发冲突、最大的并行处理

11. 消息发送和接收基于分布式消息队列EQueue,支持分布式部署

12. 基于事件驱动架构范式(EDA,Event-Driven Architecture)

13. 基于队列的动态扩容/缩容

14. EventDB中因为存放的都是不可变的事件,所以水平扩展非常容易,框架可内置支持

15. 支持Process Manager(Saga),以支持一个用户操作跨多个聚合根的业务场景,如订单处理,从而避免分布式事务的使用

16. ENode实现了CQRS架构面临的大部分技术问题,让开发者可以专注于业务逻辑和业务流程的开发,而无需关心纯技术问题

晚上把公司应用的架构结合之前研究的东西梳理了下,整理了一张架构规划图,贴在这里备份

软件各种系统架构图(二)

下面是个人理解的做架构的几个要点:

1、系统安全

这是首要考虑的,以这张图为例,网络划分为3个区:

a) DMZ区可以直接公网访问,也可以 与App Core区互通,但不能直接与DB Core区互通 (通常这里放置 反向代理Web服务器)

b) App Core区能与DMZ区、DB Core区互通,但是无法直接从公网访问 (通常这里放置 应用服务器、中间件服务器之类)

c) DB Core区仅与App Core区互通 (通常这里放置 核心数据库)

2、尽量消除单点故障

上图中,除了“硬件负载均衡”节点外,其它节点都可以部署成集群(DB有点特殊,传统RDBMS要实现分布式/集群还是比较困难的,要看具体采用的数据库产品,并非所有数据库都能方便的做Sharding),Jboss本身可以通过Domain模式+mod_cluster实现集群、Redis通过Master/Slave以Sentinel方式可以实现HA、IBM MQ本身就支持集群、FTP Server配合底层储存阵列也可以做到HA、Nginx静态资源服务器自不必说

3、成本

尽量采用开源成熟产品,jboss、redis、nginx、apache、mysql、rabbit MQ都是很好的选择。硬件负载均衡通常成本不低,但是效果明显,如果实在没钱,域名解析采用DNS轮询策略,也能达到类似效果,只不过可靠性略差。

4、Database问题

常规企业应用中,传统关系型数据仍然是主流,但是no-sql经过这几年发展,技术也日渐成熟了,一些非关键数据可以适当采用no-sql数据库,比如:系统日志、报文历史记录这类相对比较独立,而且增长迅速的数据,可以考虑存储到no-sql db甚至HDFS、TFS等分布式开源文件系统中。

如果系统数据量级达到单机RDBMS的上限,尽早考虑Sharding方案,目前mysql在这方面比较成熟,其它数据库就不好说了。

5、性能

web server、app server这些一般都可以通过集群实现横向扩张,满足性能日常增长的需求。最大的障碍还是DB,如果规模真达到了DB的上限,还是考虑换分布式DB或者迁移到“云”上吧。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多