热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

单体架构和微服务架构的分析

单体架构1.什么是单体架构?一个归档包(例如war包)包含所有功能的应用程序,我们通常称为单体应用。而架构单体应用的方法论

单体架构


1.什么是单体架构?

一个归档包(例如war包)包含所有功能的应用程序,我们通常称为单体应用。而架构单体应用的
方法论,就是单体应用架构。



2.单体架构优点

1.架构简单
2.开发、测试、部署方便



3.单体架构缺点

1.复杂性高
2.部署慢,频率低 扩展能力受限。举例:成本计算属于CPU处理密集的模块,内容属于I/O密集模块,需要更大的内存和带宽,无法针对指定模块做业务扩展
3.阻止技术创新,框架无法修改



3.单体架构结构图

在这里插入图片描述


微服务架构


1.什么是微服务

微服务"架构"是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用尽量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可能通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。



2.微服务特性

1.每个微服务可独立运行在自己的进程里,每个微服务都有自己的tomcat
2.一系列独立运行的微服务共同构建整个系统
3.每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理,用户管理。
4.可使用不同的语言和数据存储技术(契合项目情况和团队实力)
5.微服务之间通过轻量级的通信机制进行通信,例如通过REST API机型调用。
6.全自动的部署机制



3.优点

1.单个服务容易开发和维护
2.单个微服务启动快
3.局部修改容易部署
4.技术栈不受限制,比如spring mvc 切换成 Yii
5.按需伸缩,伸缩当前服务的配置不影响整个系统



4.缺点

1.运维成本比较高
2.分布式固有的复杂性,主要是各个微服务间的延时问题
3.重复劳动,比如Model类会在各个微服务重复生成



5.适用场景

1.大型、复杂的项目
2.存在快速迭代的需求
3.单个模块存在CPU处理密集、I/O访问密集的需求



6.不适合的场景

1.业务稳定
2.迭代周期长



7.微服务拆分类型

1.领域驱动设计(Domain Driven Design)
就是在可扩展性方面将复杂多变的业务排除在稳定不变的内核业务之外,从而在多变的环境中找到不变的部分,达到以不变应万变的目标,学习曲线偏高。
2.面向对象(by name./ by verb.)
by name是指面向对象的常量,by verb是指面向对象的行为。



8.拆分维度

1.职责划分,微服务只需关心以内的业务,比如订单相关业务,其他服务都让开
2.通用性划分,如用户中心、消息中心等等,这些都是其他模块必须使用到的



9.拆分粒度

1.良好的满足业务
2.幸福感,业务量不能太大、部署和维护容易
3.增量迭代,各个微服务相对独立,一次迭代只涉及到少量的微服务,发布也是对应的微服务。
4.持续进化,当前的服务是YII2开发,现在改成Spring Boot能平滑切换,还有当前的微服务进行合并和拆解。



10.微服务架构结构图

在这里插入图片描述
参考文献: 《面向未来微服务:Spring Cloud Alibaba》大目


推荐阅读
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • BPM是什么软件?1、BPM是BusinessProcessManagement的简称,译为业务流程管理,它是一种以规范化的构造端到端的卓越业务流程为中心以持续的提高组织业务绩效为 ... [详细]
  • zuul 路由不生效_Zuul网关到底有何牛逼之处?竟然这么多人在用~
    作者:kosamino来源:cnblogs.comjing99p11696192.html哈喽,各位新来的小伙伴们,大家好& ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 使用Docker安装和运行Nexus
    本文介绍了使用Docker安装和运行Nexus的方法,包括docker-compose.yml配置和启动时可能出现的权限问题解决方法。同时提供了登录控制台验证安装的地址和登录信息。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
author-avatar
rorather_0979107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有