微服务与微服务架构

最近在学习微服务,比较流行的就是阿里的Dubbo和Spring Cloud,不过目前使用Spring Cloud越来越多

微服务:

     强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用

    从技术方面理解:微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。

微服务架构:

      是⼀种架构模式,它提倡将单⼀应⽤程序划分成⼀组⼩的服务,服务之间互相协调、互相配合,为⽤户提供最终价值。每个服务运⾏在其独⽴的进程中,服务与服务间采⽤轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进⾏构建,并且能够被独⽴的部署到⽣产环境、类⽣产环境等。另外,应当尽量避免统⼀的、集中式的服务管理机制,对具体的⼀个服务⽽⾔,应根据业务上下⽂,选择合适的语⾔、⼯具对其进⾏构建。

可以去看一篇马丁大叔的文章,对微服务的理解  https://martinfowler.com/articles/microservices.html  中文翻译的网上也很多

目前学习的是Spring Cloud,Spring Cloud微服务涉及到的技术栈:

    服务开发    Springboot、Spring、SpringMVC    
    服务配置与管理    Netflix公司的Archaius、阿里的Diamond等    
    服务注册与发现    Eureka、Consul、Zookeeper等    
    服务调用    Rest、RPC、gRPC    
    服务熔断器    Hystrix、Envoy等    
    负载均衡    Ribbon、Nginx等    
    服务接口调用(客户端调用服务的简化工具)    Feign等    
    消息队列    Kafka、RabbitMQ、ActiveMQ等    
    服务配置中心管理    SpringCloudConfig、Chef等    
    服务路由(API网关)    Zuul等    
    服务监控    Zabbix、Nagios、Metrics、Spectator等    
    全链路追踪    Zipkin,Brave、Dapper等    
    服务部署    Docker、OpenStack、Kubernetes等    
    数据流操作开发包    SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)    
    事件消息总线    Spring Cloud Bus    

 

 

比较一下传统的单体应用与微服务的特点以及优缺点

测试部署:

      单体架构测试、部署成本高:业务运行在一个进程中,因此系统中任何程序的改变,都需要对整个系统重新测试并部署

      微服务每个微服务组件都是简单灵活的,能够独立部署。不像单体系统,需要一个庞大的应用服务器来支撑

伸缩性:

      单体架构可伸缩性差:单体架构系统由于单进程的局限性,水平扩展时只能基于整个系统进行扩展,无法针对某一个功能模块按需扩展。例如:电商系统,包含了 用户、商品、订单、交易、支付;如果商品的访问量非常大,我想对商品进行集群部署,这时你是无法做到,你只能对整个系统进行集群部署。

      微服务之间是松耦合,微服务内部是高内聚,每个微服务很容易按需扩展。水平扩展只要按服务进行扩展即可。

可靠性:

      单体架构可靠性差:某个BUG,例如死循环、内存溢出,会导致整个进程宕机,影响整个系统,影响其他功能。

      微服务不会因为某个bug,而导致整个系统宕机。因为服务之间是松耦合的关系,不是强依赖。

系统迭代:

      单体架构迭代困难:由于所有的功能都在一个系统里面,会导致日常迭代相当困难,例如互联网项目,多个项目每月都有一次正常迭代,必定导致代码分支过多,分支合代码繁琐困难。

      微服务由一个小团队负责更专注专业,相应的也就更高效可靠。每个微服务可以由不同的团队独立开发。

跨语言程度:

      单体架构整个系统(甚至整个企业)统一的技术栈,管理起来看似简单。但有时候统一的标准并不适合所有的实际情况。

      微服务架构与语言工具无关,自由选择合适的语言和工具,高效的完成业务目标即可。

团队协助

      单体架构整个系统一个团队。如果系统变得庞大,成员就需要学习大量的代码和领域知识,团队内的沟通和协作也变得低效。

      微服务 团队按微服务配置。成员专注于小的领域和代码集。沟通成本低。容易学习

 

同时微服务也会带来一定的问题

      1.运维成本过高,部署物数量多、监控进程多导致整体运维复杂度提升。

      2.接口兼容多版本(面向服务开发,就是面向接口开发,一般接口的变更,必然导致多个客户端要跟着改,那怎么办呢,就必须做接口的多版本开发)

      3.分布式系统的复杂性(本来就一个系统,把他拆成多个服务,就会引发,网络延迟(因为网络不稳定)、服务容错性、服务的负载均衡等等)

      4.分布式事务(微服务开发,带来的难题就是分布式事务的处理,在分布式事务这块其实也有很多解决方法)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值