聊聊单体服务VS微服务系统

简介: 聊聊单体服务VS微服务系统

简介:单体服务和微服务系统的优缺点

1、为什么从单体服务到微服务转移

①、最核心的原因是单体服务出现性能瓶颈,如日访问量只有几十万的服务在单体服务可以支持。

②、服务故障隔离:当只有单个应用对外提供服务的时候,这个时候如果 服务挂的话,这时整个应用就提供不了服务了。而在互联网中是要保证高可用(99.99%的时间理念能够对外提供功能)

2、微服务的缺点:

①、增加了整个方案的复杂度:如果系统的日访问量没有达到几十万的话是不需要用微服务的

    将系统的整合点推移到了服务之间的接口,因此这些服务的接口需要进行良好的定义,在系统中也要对服务级别达成一致,并且还需要定义其他的非功能需求。

②、数据一致性问题:分布式事务难题

     原本采用一体性应用程序架构的系统被分解为多个小型服务时,在原本的一体性架构中集中保存在某处的数据,在新的微服务应用中经常会改为保存在多个地方,这种改变可能会带来维护数据一致性的挑战。
③、网络延迟-服务之间互调存在一定的延迟 ,因为服务会部署在不同的机器上

④、增加开发复杂度

      接口调用增加够通成本,要求软实力的要求比传统项目的要高一些(WIKI文档)

      重复劳动

3、基于微服务的技术选型

①、微服务下的全家桶选择

②、微服务框架主体springBoot与springMVC

      SpringMVC提供了一种轻度耦合的方式来开发web应用,而spring只是一种分层的应用框架,IOC和AOP的一个应用层的框架,主要做了切面和bean的依赖管理。

      SpringBoot实现了自动配置,降低了项目搭建的复杂度

           独立运行的Spring项目

            提供starter简化maven配置

            免XML复杂而冗余的设计思想

③、RPC调用Dubbo与SpringCloud

      网络协议支持

             SpringCloud  使用Http协议的REST API,HTTP还要建立连接所以比较麻烦。

             Dubbo支持各种通信协议(部分采用epoll的通信协议性能更高):对应的性能可能会高点

④、组件运行流程

           SpringCloud,统一通过API网关Zuul,注册中心(Eureka),Ribbon进行负载均衡,微服务之间通过fegin进行通信处理业务

           提供Gateway网关,Gateway通过Dubbo提供的负载均衡 机制自动完成,服务注册在ZK上面,配置中心可以用阿里的diamond。

⑤、持久层选择Mysql和Redis

⑥、本地持久化选择LoadingCache

⑦、消息中间件 选择阿里系RocketMQ

      RocketMQ的消息写入内存后即返回ACK,由单独的线程专门做刷盘的操作,所有的消息均是顺序写文件。

      在阿里集团被广泛应用于交易,充值,流计算,消息推送 ,日志流式处理,binglog分发等重要场景。

相关文章
|
28天前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
【10月更文挑战第14天】深入理解微服务架构:构建高效、可扩展的系统
78 0
|
3月前
|
Kubernetes 负载均衡 微服务
Kubernetes 生态系统中的微服务治理
【8月更文第29天】随着微服务架构的普及,管理分布式系统的复杂性也随之增加。Kubernetes 作为容器编排的事实标准,为微服务架构提供了强大的支持。结合像 Istio 这样的服务网格工具,Kubernetes 能够有效地解决微服务治理中的诸多挑战,如服务发现、负载均衡、流量管理和安全策略等。
56 1
|
3月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
83 1
|
2月前
|
缓存 Java 开发者
开发故事:一个 @Async 如何搞瘫整个微服务系统
大家好,我是小米,一个热爱分享技术的29岁开发者。本文讲述了一个困扰我们团队的开发环境问题,最终发现罪魁祸首竟是 `@Async` 注解。我们通过详细分析错误日志和 Spring 的 Bean 代理机制,逐步排查并解决了这一难题。文章介绍了三种解决方案:调整依赖结构、使用 `@Lazy` 延迟加载以及禁用 `@Async` 的代理功能。希望对你有所帮助!欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
31 5
开发故事:一个 @Async 如何搞瘫整个微服务系统
|
2月前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
194 3
|
3月前
|
存储 API 持续交付
探索微服务架构:构建灵活、可扩展的后端系统
【8月更文挑战第25天】 本文将引导您理解微服务架构的核心概念,探讨其对现代后端系统设计的影响。我们将从基础讲起,逐步深入到微服务的高级应用,旨在启发读者思考如何利用微服务原则优化后端开发实践。
48 4
|
3月前
|
负载均衡 Cloud Native 中间件
核心系统转型问题之微服务架构并存的问题如何解决
核心系统转型问题之微服务架构并存的问题如何解决
|
3月前
|
Java Docker 微服务
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。
微服务架构已成为Java Web开发的新趋势,它通过将应用分解为独立、可部署的服务单元,提升了系统的灵活性与可维护性。每个服务负责特定功能,通过轻量通信机制协作。利用Spring Boot与Spring Cloud等框架可简化开发流程,支持模块化设计、独立部署、技术多样性和容错性,适应快速迭代的需求。
75 1
|
3月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
3月前
|
Prometheus 监控 Java
微服务架构下的服务治理策略:打破服务混乱的惊天秘籍,开启系统稳定的神奇之门!
【8月更文挑战第7天】微服务架构将应用细分为可独立部署的小服务,提升灵活性与可扩展性。但服务增多带来治理挑战。通过服务注册与发现(如Eureka)、容错机制(如Hystrix)、监控工具(如Prometheus+Grafana)、集中配置管理(如Spring Cloud Config)和服务网关(如Zuul),可有效解决这些挑战,确保系统的高可用性和性能。合理运用这些技术和策略,能充分发挥微服务优势,构建高效应用系统。
62 1