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

关于微服务的分享

作者头像
每天学Java
发布2020-06-02 10:18:20
6520
发布2020-06-02 10:18:20
举报
文章被收录于专栏:每天学Java

微服务简介

微服务应该可以说是这几年比较流行火爆的名词了,很多互联网公司也已经开始采用微服务架构体系,即使比较传统的软件公司也慢慢的开始重新架构现有的应用程序。

微服务是一种架构体系,想要实现这种架构,所涉及的技术(组件)是比较多的,比如服务配置,服务发现注册,服务调用,负载均衡,消息队列,服务监控,链路追踪等等。基于这些组件,我们一般会采用SpringCloud来实现微服务体系,因为Springcloud一个工具组件集,基于SpringBoot提供了快速搭建分布式环境的通用模式,所以SpringCloud可以认为是提供了微服务架构的一站式解决方案。

微服务的出现

首先我们先看这样的一条时间线:

当我们接触Web开发的时候,最先学习的应该是Servlet和JSP了,这也是十几年前(大概零几年)比较实用的技术了,有过这种技术开发经验的同学应该能知道它的弊端:所有的东西都写在一块,Java中可能会写前端代码,JSP中又包含了许多Java代码。

再到后来我们会接触一些框架,比如Struts,Spring,hibernate(SSH)等等。这些框架实现了在架构上的分层,也就是典型的MVC架构(现在很多应用仍然保留MVC架构),分层之后,代码就相对有条理了,逻辑就比较清晰了。

MVC架构出现对于软件的管理提供了便利,而且代码耦合性低,重用性高,但是过了不久,互联网行业越来越火,一些互联网公司提供的应用服务每天可能有高达成百上千万的请求访问,这个时候简单的MVC架构不能支撑起这么高的并发,于是采用了集群。在我刚踏入社会那会(16年),面试互联网公司只要一问到高并发的解决方案,都少不了提到增加服务器,扩展集群的节点。使用集群能提升系统的处理能力,在高并发的问题上是一种有效的方案。但是集群也并不是没有缺点,比如:该如何分配请求到集群的某个节点,Session如何共享的问题,除此之外,当业务发展到一定的程度,扩展集群并不能有效的提升性能(此时瓶颈已经不在集群本身了,而可能是IO,网络,内存等等)。

基于集群的缺点,又有了分布式架构解决方案,为什么这么说呢,在分布式架构下我们会将应用拆分成多个子应用,子应用之间通过RPC方式(比如hessian)进行通讯,基于子应用的特点,比如高计算型,高IO型等等特点,我们可以进行针对性的服务配置,如此一来能有效避免集群的瓶颈,说到这里你是不是觉得这不就是SOA架构吗?我个人理解不是的(稍后回答)。在分布式架构中,多台应用的总和才是外部用户感知的一个应用系统,从集群到分布式我们可以理解它是一种横向的拆分,横向拆分实际上就是分层,更过的是关注应用。但是分布式架构中的应用会存在有些通用的业务逻辑是无法共用的。

分布式架构之后就是现在的SOA架构了,为什么上面我说分布式架构和SOA是有区别的,因为分布式架构虽然对于应用系统做了功能拆分,但是子应用之间存在的通用业务是无法实现共用的,因为仅仅做了横向的拆分,SOA中基于分布式,又做了纵向的拆分,子应用变成了服务层和表现层,每个表现层可以去调用服务层中提供的服务,也就实现了通用业务的共用。

SOA架构同微服务又有什么关系呢?其实从整体上看他们是同一种架构,但是微服务在细节上可能会做更多的拆分,比如原有的单个服务可能继续拆分成多个服务。

如何学习

既然微服务的出现我们已经说了,秉承存在即合理的说法,我们就不说他目前的缺点了,我们看如何学习微服务。

因为微服务的发展到现在,经历了许多优秀的架构,所以学习的东西是比较多的,如何入手学习上,我这里给出自己的建议

一:单机-集群-分布式-SOA-微服务,

1.利用SpringBoot搭建一个应用模块,实现所需的功能(学习SpringBoot)。

2.再搭建几个相同的应用模块,利用VMware开几个虚拟机,使用Nginx做负载均衡(集群,Nginx,共享Session)。

3.项目横向拆分,分模块构建(比如多Maven项目)

4.纵向拆分,可以基于每个模块的核心服务,组合自己的服务层,根据SpringCloud中的组件实现服务治理(比如Eureka,Feign,Zuul,slueth等)。

二:购买微服务相关的课程和书籍

方式一我个人觉得是比较耗时(自己去安装应用和中间件是比较烦的,比如MySQL,MQ,ES,NoSQL,Docker,K8S等等)也容易绕弯路(当然也会更加深刻),看视频和书来配合实践应该是最好的,而且视频和书籍涉及的内容应该是较为全面的,毕竟站在巨人的肩膀上看的比较远。

相关问题

基于上面所说,这里我整理出来一些相关问题:

1.一个完整的微服务系统,应该包含哪些功能?

2.微服务化之后,我们在背后需要付出哪些代价?

3.我们为什么需要RPC,有哪些主流的RPC框架,如果让你来实现一个RPC框架你会怎么考虑?

4.SpringCloud目前能脱离SpringBoot独立开发吗?

5.构建一个多Maven项目有哪些好处和弊端

6.服务注册中心Eureka,Zookeeper,Consul适用场景是什么?


关于答案,请先允许我说这么一段故事:这个周末没有更新文章,因为两天都在培训学习某互联网公司基于SpringCloud自研的框架,想从中学习并加以运用。这个过程中认识了蚂蚁某服的同学,聊到这么一件事:流量主每天才百八十块钱,还是不停在亲戚朋友微信群骚扰才弄出来的。此位GIT上万星大佬跟我说,你可以把文章写好一点,在最后引一些问题,让用户看完广告再给看答案。我一想,好有道理啊,如果厌烦的话就不看,反正问题都不难,百度一大堆,如果对答案有好奇心话,看10来秒的广告就OK来。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学Java 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微服务简介
  • 微服务的出现
  • 如何学习
  • 相关问题
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档