分层模型应该是我们编程里面最常用的模型,尤其是web开发里面,会有表示层、业务层和持久化层以及DB层,在表示层主要是web页面,业务层主要是编写核心的业务代码,持久化层主要是负责保存数据。通过分层将职责分开,上一层调用下一层的接口。反过来,下层的设计不会依赖上层。
和分层模型比较关联的MVC模型,也是web开发中常用的,其中M是数据mode定义,也就是定义业务类,V是视图,用于数据展现,C是controller控制,编写业务逻辑。
管道过滤器主要用于数据处理,源数据经过一系列的过滤器处理后发送到sink。这里的过滤器不仅限于过滤,还可以用于数据处理。
不同的过滤器实现相同的接口,这种松耦合的方式可以随意将不同过滤器组合到一起。但由于链路比较长,延迟会比较高。
这种方式主要是客户端通过网络连接到服务器,客户端通过HTTP或者RPC的方式,请求服务端,并等待服务端返回。
这种模式由于服务端是中心化的,性能瓶颈在服务端。
事件驱动也是最近两年比较流行的概念,服务之间通过事件驱动执行。它是一种更加松耦合的方式,事件的触发者甚至不知道这个事件会被谁去消费,通常扔到消息队列里面。
事件的消费者通过监听关心的事件,触发执行操作。我们熟知的knative 以及FaaS 等很多地方都使用了事件触发,譬如我们通过 FaaS 图片处理,每当上传一个图片到对象存储就会触发一次事件,执行对应的函数。
微服务也是这两年比较流行的概念,尤其是云原生(微服务、容器化、Devops)的兴起。微服务主要是解决单体架构的弊端。将单个庞大的服务拆分成多个高内聚、低耦合并且职责单一的微服务。
服务之间通过API 相互调用,外部通过API gateway 转发请求。并且每个服务都可以独立部署和发布。