# 2.1:服务端架构设计

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!

# 一、前言

可能有些同学一听到架构会感觉到有些“高大上”,或者以为这些东西有些神秘。当然如果是刚刚接触开发没多久,或者刚工作只是参与业务需求的实现,并没有从整体看待全局。那么是有可能对这些架构的字眼有些发蒙。其实从简单来说,哪怕是你最开始练习做作业的 CRUD,其实它也是一种建构模式。只不过在这个架构的世界里有一个叫更适合的词,只有适合你业务的才是更好的架构。不一定非得把你仅仅是一个非常小的几十人访问的工程,非得用上分布式。也不是硬是要在十万并发的场景下直连数据库。所以更适合才是更好的架构。

那么!一个架构模型的诞生还远不止结构上的分层,还包括多技术以及相应内部业务模块的融合。例如;你的服务基础使用 Spring 还是 SpringBoot、你需要使用到 RPC 可能会选择 Dubbo、你的缓存使用 Redis、你的数据库分库分表用 MyCat、你的文件系统使用 ES 等等,以及你自己开发的一些中间件。

好! 接下来我们开始设计目前这个通信服务的一个控制中心的服务端架构。

# 二、架构目标

在前面我们说到更适合的架构,才是符合你当下需要最好的架构。那么怎么设计这样架构呢,基本就是要找到符合点的目标。我们之所以这样设计是为什么,那么在这个系统里有如下几点;

  • 我们系统在服务端要有 web 页面进行管理通信用户以及服务端的控制和监控。
  • 数据库的对象类,不要被外部污染,要有隔离性。比如说;你的数据库类暴漏给外部做展示类使用了,那么现在需要增加一个字段,而这个字段又不是你数据库存在的属性。那么这个时候就已经把数据库类污染了。
  • 因为目前我们都是在 Java 语言下实现 Netty 通信,那么服务端与客户端都会需要使用到通信过程中的协议定义和解析。那么我们需要抽离这一层对外提供 Jar 包。
  • 接口、业务处理、底层服务、通信交互,要有明确的区分和实现,避免造成混乱难以维护。

结合我们上面这四点的目标,你头脑中有什么模型结构体现了呢?以及相应的技术栈选择上是否有计划了?接下来我们会介绍两种架构设计的模型,一种是你非常熟悉的 MVC,另外一种是你可能听说过的 DDD 领域驱动设计。