前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务总结

微服务总结

原创
作者头像
后端码匠
修改2021-08-20 10:52:04
1930
修改2021-08-20 10:52:04
举报
文章被收录于专栏:后端码匠后端码匠

微服务架构的4个核心问题

  • 服务很多, 客户端该怎么访问?
  • 这么多服务, 服务之间如何通信?
  • 这么多服务, 如何治理?
  • 服务挂了怎么办?

解决方案

SpringCloud生态 SpringBoot

  • SpringCloud NetFlix 一站式解决方案undefinedapi网关 zuul组件 Feign ---HttpClinet ---Http通信方式同步阻塞 服务注册与发现: Eureka 熔断机制: Hystrix
  • Apache Dubbo Zookeeper 半自动需要整合别人的 api网关 没有 找第三方组件, 或者自己实现 Dubbo Zookeeper 没有借助 Hystrix

Dubbo 这个方案并不完善~

  • SpringCloud Alibaba 一站式解决方案 更简单

新概念 服务网格~Serve Mesh

istio

万变不离其宗

  • API网关
  • HTTP RPC
  • 注册和发现
  • 熔断机制

网络不可靠!

常见面试题

  • 什么是微服务
  • 微服务之间是如何建立通信的
  • SpringCloud和Dubbp有哪些区别
  • SpringCloud和SpringBoot请谈谈你对他们呢得理解
  • 什么服务熔断? 什么是服务降级
  • 微服务得优缺点是什么? 说下你在项目开发中遇到的坑
  • 你所知道的微服务技术有哪些? 列举一二
  • eureka和zookeeper都可以实现提供服务注册与发现功能, 请说明两个的区别?

微服务概述

什么是微服务

什么是微服务?(熟悉的同学可以直接跳过)

简单举例:看军事新闻的同学应该都知道,一艘航空母舰作战能力虽然很强,但是弱点太明显,就是防御能力太差,单艘的航空母舰很少单独行动,通常航空母舰战斗群才是主要军事力量,你可以把单艘航母理解为的单体应用(防御差,机动性不好),把航母战斗群(调度复杂,维护费用高)理解为微服务。

大部分的开发者经历和开发过单体应用,无论是传统的 Servlet + JSP,还是 SSM,还是现在的 SpringBoot,它们都是单体应用,那么长期陪伴我们的单体应用有什么弊端?我们是面临了什么问题,导致我们要抛弃单体应用转向微服务架构?个人总结主要问题如下:

  • 部署成本高(无论是修改1行代码,还是10行代码,都要全量替换)
  • 改动影响大,风险高(不论代码改动多小,成本都相同)
  • 因为成本高,风险高,所以导致部署频率低(无法快速交付客户需求)
  • 当然还有例如无法满足快速扩容,弹性伸缩,无法适应云环境特性等问题,但我们不一一详谈了,以上的问题,都是微服务架构要解决的问题,至于具体是怎么解决的,我们先放到后面再聊

https://martinfowler.com/articles/microservices.html

微服务与微服务架构

微服务

强调的是服务的大小, 它关注的是某一点, 在具体解决某一问题/提供落地对应服务的一个服务应用, 侠义的看, 可以看作是IDEA中的一个个微服务工程, 或者Moudel

  • IDEA工具里面使用Maven开发的, 一个个独立的Moudel, 它具体使用springboot开发的一个模块, 专业的事情交给专业的模块来做, 一个模块就做一个事情
  • 强调的是一个个的个体, 每个个体完成一个具体的任务或者功能

微服务架构

一种新的框架形式, Martin Fowler 2014年提出

微服务框架是一种框架模式, 它提倡将单一应用程序化为一组服务, 服务之间相互协调, 互相配合, 为用户提供最终价值. 每个服务运行在其独立进程中, 服务于服务间采用轻量级的通信机制相互协作, 每个服务都围绕着具体业务来构建, 并且能够独立部署到生产环境中, 另外, 尽量避免统一的, 集中式的管理机制. 对于一个具体服务而言, 应根据服务上下文, 选择合适的语言工具进行构建.

微服务的优缺点

优点:

  • 这种单体架构的优点在于方便管理,所有代码在同一项目中,但是当需求越来越多,项目规模越来越大,其坏处也很明显。
  • 单一职责原则
  • 每个服务足够内聚, 足够小, 代码容易理解, 这样能够聚焦一个指定的业务功能或业务需求
  • 开发简单, 开发效率高, 一个服务就是专一的只干一件事情
  • 微服务可以被小团队开发, 这个小团队是2-5人开发人员组成
  • 微服务是松耦合的, 具有功能意义的服务, 无论是在开发阶段还是在部署阶段
  • 微服务可以使用不同语言开发
  • 易于和第三方库集成, 微服务允许容易灵活的方式自动部署, 通过持续集成工具, 如Jenkins Hudson bamboo
  • 微服务允许你利用融合最新技术
  • 微服务只是逻辑代码, 不会和html css或其他界面混合
  • 每个微服务都有自己的存储能力, 可以有自己的数据库, 也可以有一些数据库

缺点:

  • 开发人员需要处理分布式系统的复杂性
  • 多服务运维难度, 随着服务增加, 运维压力也在增加(运维压力增大)
  • 系统部署依赖
  • 服务间通信成本
  • 数据一致性
  • 系统集成测试
  • 性能监控
  • 项目过于臃肿,部署效率低下

当大大小小的功能模块都集中在同一项目的时候,整个项目必然会变得臃肿,让开发者难以维护。单体应用的代码越来越多,依赖的资源越来越多时,应用编译打包、部署测试一次非常耗时。

  • 系统高可用性差,资源无法隔离 整个单体系统的各个功能模块都依赖于同样的数据库、内存等资源,一旦某个功能模块对资源使用不当,整个系统都会被拖垮。
  • 开发成本高 早期在团队开发人员只有两三个人的时候,协作修改代码,打包部署,更新发布这完全可以控制。但是团队一旦扩张,还是按照早期的方法去开发,那如果测试阶段只要有一块功能有问题,就得重新编译打包部署。所有的开发人员又都得参与其中,效率低下,开发成本极高。
  • 无法灵活拓展 当系统的访问量越来越大的时候,单体系统固然可以进行水平扩展,部署在多台机器上组成集群:

为什么选择SpringCloud作为微服务框架

选型依据

  • 整体解决方案和框架的成熟度
  • 社区热度
  • 可维护性
  • 学习曲线

当前各大IT公司用的微服务框架有哪些

  • 阿里: dubbo HFS
  • 京东: JSF
  • 新浪: Motan
  • 当当网: DubboX
  • ...

各微服务框架对比

文章已上传gitee https://gitee.com/codingce/hexo-blog

项目地址: https://github.com/xzMhehe/codingce-java

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微服务架构的4个核心问题
  • 解决方案
  • 微服务概述
    • 什么是微服务
      • 微服务与微服务架构
        • 微服务的优缺点
          • 为什么选择SpringCloud作为微服务框架
            • 选型依据
              • 当前各大IT公司用的微服务框架有哪些
                • 各微服务框架对比
                相关产品与服务
                弹性伸缩
                弹性伸缩(Auto Scaling,AS)为您提供高效管理计算资源的策略。您可设定时间周期性地执行管理策略或创建实时监控策略,来管理 CVM 实例数量,并完成对实例的环境部署,保证业务平稳顺利运行。在需求高峰时,弹性伸缩自动增加 CVM 实例数量,以保证性能不受影响;当需求较低时,则会减少 CVM 实例数量以降低成本。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档