每个服务聚焦于一块业务,无论在开发阶段或是部署阶段都是独立的,更适合被各个小团队开发维护,团队对服务的整个生命周期负责,工作在独立的上下文之中。
如果某一项服务的性能达到瓶颈,我们只需要增加该服务负载节点,能够针对系统的瓶颈服务更有效的使用资源。
服务A可以使用.net实现 ,服务B可以使用java实现,技术选型灵活,系统不会长期限制在某个技术栈上。
松耦合、高内聚,代码容易理解,开发效率高,更好维护。
高可用,每个服务可以启动多个实例负载,单个实例挂了有足够的响应时间来修复
l 缺点系统规模庞大,运维要求高,需要devops技巧(Jenkins,Kubernetes等等)
跨服务需求需要团队之间的协作
跨服务的调用(http/rpc)增加了系统的延迟
l Dockerdocker是目前普遍使用的容器化技术,在此架构中我们的应用程序将部署在docker容器里面,通过docker发布应用 需要先编写一个dockerfile,如下
#引入镜像 .net core 3.1 FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base #设定工作目录 WORKDIR /app #在容器中程序使用的端口,一定要和程序启动使用的端口对应上 EXPOSE 80 #复制文件到工作目录 COPY . . #环境变量 此变量会覆盖appsetting.json 内的同名变量 ENV Ip "" ENV Port "" #启动程序 ENTRYPOINT ["dotnet", "Union.UserCenter.dll"]