你们的项目真的适合微服务吗?

本文为原创资源,欢迎分享,转载。

JAVA开发大本营

前言:最近几年微服务可以说是火爆了码农界,面试几乎多多少少都会问到微服务相关的问题,仿佛程序员不沾点微服务就OUT了。身边大大小小的公司或者团队都在进行微服务的开发及改造。

    但是实际上,很多团队对于微服务并没有一个深入的了解。很多团队一上手就是微服务,但是却完全没有将微服务应有的特性给展现出来。微服务的低耦合,灵活发布等特性被整体项目给困得死死的。强行拆分,项目耦合严重。甚至可以说得上连最简单的一体化应用都不如。

    作者亲身经历了几个大型微服务项目的从零到百万并发甚至上千万并发的过程。做为实践者,希望能跟大家分享介绍一下微服务。

             

专业术语:

异构:异构也就是采用多种语言进行开发 

耦合:一个软件结构内不同模块之间互连程度的度量             

一体化应用:将多个功能进行管理整合的单体应用

微服务扑拓:是指用传输互连各个服务的微服务架构布局。

        

《1.什么是微服务》

    微服务是一种架构风格。其中,微代表体积小,而服务代表着只服务与单一功能,总结起来微服务就是,多个很小的,只服务与单一功能的最小功能单元组合而成的系统。

    一个大型的软件系统通常由多个微服务应用组成。系统中的每一个微服务都能被很好的独立部署,能够解决单体应用耦合严重的缺点,同时可以很好的提升其中某个微服务的性能瓶颈,而不用将服务器浪费在不需要性能的微服务上。同时由于每个微服务都专注于一个功能,所以能够满足越来越复杂的业务需求。

《2.微服务架构相较于一体化架构的优势》

    我们在判断是否使用微服务之前,首先我们可以了解一下传统的一体化架构的痛点与微服务架构是否解决了这些问题。

1.遇到性能瓶颈时容易造成资源的浪费

  传统的一体化应用只能在负载均衡之后放置多个实例进行水平扩展。

  举个例子:

  一体化架构:一个商城系统中秒杀出现了并发的情况,这个时候,在不改变系统架构的情况下,代码级别的优化是有瓶颈的,这个时候必然需要加服务器,创建多个实例,这个是系统级别的。但是除了秒杀这一块,后台管理,商品,等功能完全不会遇到性能瓶颈,这个时候就会造成资源的浪费。

  微服务架构:而微服务架构在事先就会将秒杀单独布置成一个微服务模块或者放置在活动模块之中,那么当性能瓶颈来到的时候,我们只需要将单个服务进行性能扩展就可以了,对其他微服务模块没有任何影响,同时减少资源的浪费。

2.不便于异构

  一体化架构:异构也就是采用多种语言进行开发,传统的单一系统在项目开始的时候就已经被某种技术或者语言锁定,造成了如果需要更改语言,我们需要进行项目重构。

  微服务架构:每个服务的实现细节都相对独立,服务之间耦合较低,团队可以对每个服务进行评估,根据团队的情况针对每个服务选择最合适的开发语言以及开发方案。

3.交付周期拉长

  一体化架构:一体化架构在应用的任何更改都需要构建和部署整个应用程序。构建与部署的时间相应的较长,不利于频繁的部署,阻碍持续阶段性交付。拉长整个交付周期。

  微服务架构:微服务架构由多个微服务功能模块组成,如果某个功能需要改变,我们仅仅需要构建和部署修改对应的微服务模块。甚至可以短时间内多次部署测试。提高了开发效率。

4.故障级联

  一体化架构:通常在没有做业务分离的情况下,一体化架构耦合严重,很可能一个小问题会导致整个系统的崩溃。

  微服务架构:故障隔离,耦合较低,一个服务出现问题并不会影响到整个服务。同时由于微服务有断路器的存在,当关键服务不可用或者可用性不强时,系统仍然可以正常运行。

5.技术债务

  一体化架构:技术债务是个很严重的问题,相信每个成型的开发团队或多或少都会遇到过相关的问题。随着时间的推移,人员的变更,前期为了项目的进度,省下的技术文档,单元测试,缺少注释。这一切,都将让后来的开发者进行买单,还债,当你修改一个功能时,会影响到意想不到的地方。

  微服务架构:微服务架构极大的避免了一些不必要的技术债务的产生,各个微服务模块单一化的职责,每个服务明确的发布接口,使得业务的耦合降到了最低。同时,易于开发、理解和维护,也可以将债务降到最低。

  综上看来,微服务架构确实很好的解决了我们传统一体化架构一些痛点。在原有的架构基础上进行了一系列的改良。当下,也有很多公司完成了从一体化架构向微服务架构的迁移重构。那么微服务的使用又会有哪些痛点呢?

《3.微服务的使用会有哪些痛点呢》

    

    实际上,微服务从2014年开始提出就开始引爆了整个技术圈,但真正大规模应用到生产应该是2016年。那个时候整个周边都在聊微服务,仿佛不聊几句微服务就不是程序员了一样。但是在实际使用微服务以及与周围同行讨论的过程中,我们发现了微服务的很多痛点。

 

1.服务难以治理,技术天花板高

    微服务会拉高整个技术团队的天花板,对团队的技术门槛也会要求很高。随着开发的不断进行,除了最基础的服务发现、配置中心和授权管理。团队将会在分布式跟踪、熔断降级、灰度发布、故障切换等一系列微服务治理场景中遇到种种难题。给团队带来了非常大的麻烦。

 

2.微服务应用是分布式系统,由此会带来固有的复杂性。

  

    本身上微服务就是一个分布式项目,分布式项目相对于单体项目通过语言或者进程进行调用,微服务必须处理消息响应过慢,甚至无法召回的情况。

 

3.难以测试

 

    测试一个大型的微服务应用是一件很复杂的任务,测试一个简单的单体系统,我们只需要测试他的REST API即可,测试一个微服务项目,我们最起码要启动注册中心,网关,本身的模块,以及依赖的模块。对于测试带来了很大的不便。

 

4.微服务部署,运维有点吃不消

  部署一个微服务系统以及相关的各项自动化组件,对运维实际上是一件很大的挑战,多个服务的配置,部署,扩展,监控。同时,自动发布(jenkins),对服务做容器化(docker),包括每个服务后续的数据库一系列。运维小哥说:“臣妾做不到啊”。那么到底什么样的项目都适用于微服务架构呢?

《4.什么样的项目适合微服务》

   

    其实微服务架构并不是万能的,其实在架构设计中,微服务本身是一件奢侈品。

    在复杂度较小的场景中,一体化架构的效率明显更高,当复杂度或者业务量到了一定的程度时,单体应用的生产效率开始极速降低,这时再对他进行微服务化才是合理的,所以,一切脱离实际业务的微服务都是耍流氓。

    那么到底什么样的项目适合微服务呢,一般来说,应该满足以下几个条件的一个到两个:

  1.产品已经稳定或者已经有明确的产品形态,明确产品的边界,因为微服务扑拓一旦形成,重构的成本超乎想象。

  2.公司技术积累较为成熟,有微服务项目经验,开发较为便捷,开发者有足够的控制部署方法,并且高度自动化。

  3.业务并发较大,并且集中在一个或者少量几个业务场景下,使用微服务可有效节省资源。

  当满足以上条件一个时,其实就可以上微服务了,同时如果是准备技术积累的一些公司,建议逐步试点,然后以点破面,逐步在团队中推行微服务架构。市面上到底有多少种常见的微服务框架呢?

《5.现有的一些常用微服务框架》

Spring Cloud

  Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

   Spring Cloud有五大重要组件,他们分别是:

     服务发现——Netflix Eureka

     客服端负载均衡——Netflix Ribbon/Feign

     服务网关——Netflix Zuul

     断路器——Netflix Hystrix

     分布式配置——Spring Cloud Config

Motan

  Motan是新浪开源的一个RPC框架,可以看做是Dubbo的量身裁剪版。也属于服务治理型框架。Motan 提供了丰富的服务治理功能和优秀的扩展能力,可以方便的基于 Motan 进行二次开发。

gRPC

  gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。

Thrift

  Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。

Dubbo

  Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,Dubbo是一个分布式服务框架。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。

    这几种就是市面上常见的微服务框架。其实,我们使用微服务框架还是需要结合实际的场景选择合适的架构与框架,总而言之,只有适合自己的,才是最好的。

                                                                       

码字不易,觉得作者写得不错的,可以在文末右下角点个在看,感谢!


本篇会收录在面试经验-原创面试干货分类中,欢迎转载,分享!!!!


微服务是什么?微服务是用于构建应用程序的架构风格,一个大的系统可由一个或者多个微服务组成,微服务架构可将应用拆分成多个核心功能,每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作和出现故障的时候不会相互影响。为什么要用微服务?单体架构下的所有代码模块都耦合在一起,代码量大,维护困难,想要更新一个模块的代码,也可能会影响其他模块,不能很好的定制化代码。微服务中可以有java编写、有Python编写的,他们都是靠restful架构风格统一成一个系统的,所以微服务本身与具体技术无关、扩展性强。大型电商平台微服务功能图为什么要将SpringCloud项目部署到k8s平台?SpringCloud只能用在SpringBoot的java环境中,而kubernetes可以适用于任何开发语言,只要能被放进docker的应用,都可以在kubernetes上运行,而且更轻量,更简单。SpringCloud很多功能都跟kubernetes重合,比如服务发现,负载均衡,配置管理,所以如果把SpringCloud部署到k8s,那么很多功能可以直接使用k8s原生的,减少复杂度。Kubernetes作为成熟的容器编排工具,在国内外很多公司、世界500强等企业已经落地使用,很多中小型公司也开始把业务迁移到kubernetes中。kubernetes已经成为互联网行业急需的人才,很多企业都开始引进kubernetes技术人员,实现其内部的自动化容器云平台的建设。对于开发、测试、运维、架构师等技术人员来说k8s已经成为的一项重要的技能,下面列举了国内外在生产环境使用kubernetes的公司: 国内在用k8s的公司:阿里巴巴、百度、腾讯、京东、360、新浪、头条、知乎、华为、小米、富士康、移动、银行、电网、阿里云、青云、时速云、腾讯、优酷、抖音、快手、美团等国外在用k8s的公司:谷歌、IBM、丰田、iphone、微软、redhat等整个K8S体系涉及到的技术众多,包括存储、网络、安全、监控、日志、DevOps、微服务等,很多刚接触K8S的初学者,都会感到无从下手,为了能让大家系统地学习,克服这些技术难点,推出了这套K8S架构师课程。Kubernetes的发展前景 kubernetes作为炙手可热的技术,已经成为云计算领域获取高薪要掌握的重要技能,在招聘网站搜索k8s,薪资水平也非常可观,为了让大家能够了解k8s目前的薪资分布情况,下面列举一些K8S的招聘截图: 讲师介绍:  先超容器云架构师、IT技术架构师、DevOps工程师,曾就职于世界500强上市公司,拥有多年一线运维经验,主导过上亿流量的pv项目的架构设计和运维工作;具有丰富的在线教育经验,对课程一直在改进和提高、不断的更新和完善、开发更多的企业实战项目。所教学员遍布京东、阿里、百度、电网等大型企业和上市公司。课程学习计划 学习方式:视频录播+视频回放+全套源码笔记 教学服务:模拟面试、就业指导、岗位内推、一对一答疑、远程指导 VIP终身服务:一次购买,终身学习课程亮点:1. 学习方式灵活,不占用工作时间:可在电脑、手机观看,随时可以学习,不占用上班时间2.老师答疑及时:老师24小时在线答疑3. 知识点覆盖全、课程质量高4. 精益求精、不断改进根据学员要求、随时更新课程内容5. 适合范围广,不管你是0基础,还是拥有工作经验均可学习:0基础1-3年工作经验3-5年工作经验5年以上工作经验运维、开发、测试、产品、前端、架构师其他行业转行做技术人员均可学习课程部分项目截图   课程大纲 k8s+SpringCloud全栈技术:基于世界500强的企业实战课程-大纲第一章 开班仪式老师自我介绍、课程大纲介绍、行业背景、发展趋势、市场行情、课程优势、薪资水平、给大家的职业规划、课程学习计划、岗位内推第二章 kubernetes介绍Kubernetes简介kubernetes起源和发展kubernetes优点kubernetes功能kubernetes应用领域:在大数据、5G、区块链、DevOps、AI等领域的应用第三章  kubernetes中的资源对象最小调度单元Pod标签Label和标签选择器控制器Replicaset、Deployment、Statefulset、Daemonset等四层负载均衡器Service第四章 kubernetes架构和组件熟悉谷歌的Borg架构kubernetes单master节点架构kubernetes多master节点高可用架构kubernetes多层架构设计原理kubernetes API介绍master(控制)节点组件:apiserver、scheduler、controller-manager、etcdnode(工作)节点组件:kube-proxy、coredns、calico附加组件:prometheus、dashboard、metrics-server、efk、HPA、VPA、Descheduler、Flannel、cAdvisor、Ingress     Controller。第五章 部署多master节点的K8S高可用集群(kubeadm)第六章 带你体验kubernetes可视化界面dashboard在kubernetes中部署dashboard通过token令牌登陆dashboard通过kubeconfig登陆dashboard限制dashboard的用户权限在dashboard界面部署Web服务在dashboard界面部署redis服务第七章 资源清单YAML文件编写技巧编写YAML文件常用字段,YAML文件编写技巧,kubectl explain查看帮助命令,手把手教你创建一个Pod的YAML文件第八章 通过资源清单YAML文件部署tomcat站点编写tomcat的资源清单YAML文件、创建service发布应用、通过HTTP、HTTPS访问tomcat第九章  kubernetes Ingress发布服务Ingress和Ingress Controller概述Ingress和Servcie关系安装Nginx Ingress Controller安装Traefik Ingress Controller使用Ingress发布k8s服务Ingress代理HTTP/HTTPS服务Ingress实现应用的灰度发布-可按百分比、按流量分发第十章 私有镜像仓库Harbor安装和配置Harbor简介安装HarborHarbor UI界面使用上传镜像到Harbor仓库从Harbor仓库下载镜像第十一章 微服务概述什么是微服务?为什么要用微服务微服务的特性什么样的项目适合微服务?使用微服务需要考虑的问题常见的微服务框架常见的微服务框架对比分析第十二章 SpringCloud概述SpringCloud是什么?SpringCloud和SpringBoot什么关系?SpringCloud微服务框架的优缺点SpringCloud项目部署到k8s的流程第十三章 SpringCloud组件介绍服务注册与发现组件Eureka客户端负载均衡组件Ribbon服务网关Zuul熔断器HystrixAPI网关SpringCloud Gateway配置中心SpringCloud Config第十四章 将SpringCloud项目部署到k8s平台的注意事项如何进行服务发现?如何进行配置管理?如何进行负载均衡?如何对外发布服务?k8s部署SpringCloud项目的整体流程第十五章 部署MySQL数据库MySQL简介MySQL特点安装部署MySQL在MySQL数据库导入数据对MySQL数据库授权第十六章 将SpringCLoud项目部署到k8s平台SpringCloud的微服务电商框架安装openjdk和maven修改源代码、更改数据库连接地址通过Maven编译、构建、打包源代码在k8s中部署Eureka组件在k8s中部署Gateway组件在k8s中部署前端服务在k8s中部署订单服务在k8s中部署产品服务在k8s中部署库存服务第十七章 微服务的扩容和缩容第十八章 微服务的全链路监控什么是全链路监控?为什么要进行全链路监控?全链路监控能解决哪些问题?常见的全链路监控工具:zipkin、skywalking、pinpoint全链路监控工具对比分析第十九章 部署pinpoint服务部署pinpoint部署pinpoint agent在k8s中重新部署带pinpoint agent的产品服务在k8s中重新部署带pinpoint agent的订单服务在k8s中重新部署带pinpoint agent的库存服务在k8s中重新部署带pinpoint agent的前端服务在k8s中重新部署带pinpoint agent的网关和eureka服务Pinpoint UI界面使用第二十章 基于Jenkins+k8s+harbor等构建企业级DevOps平台第二十一章 基于Promethues+Alert+Grafana搭建企业级监控系统第二十二章 部署智能化日志收集系统EFK 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

carl的分享笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值