微服务学习和认识

微服务学习和认识

1.什么是微服务

微服务架构风格:是一类将单一应用程序作为由众多小型服务构成之套件加以开发的方式,其中各项服务都拥有自己的进程并利用轻量化机制(通常为HTTP源API)实现通信。这些服务围绕业务功能建立而成,且凭借自动化部署机制实现独立部署。这些服务匹配一套最低限度的中央式管理机制,且各服务可通过不同编程语言编写而成并使用不同的数据存储技术

2.微服务的目

有效的拆分应用,实现敏捷开发和部署

3.微服务的优点

  • 开发简单
  • 技术栈灵活
  • 服务独立无依赖
  • 独立部署、按需扩展
  • 可用性高

4.微服务的缺点

  • 多服务运维难度
  • 系统部署依赖
  • 服务间通信成本
  • 数据一致性
  • 系统集成测试
  • 重复工作
  • 性能监控

5.客户端如何访问这些服务?

原来的Monolithic方式开发,所有的服务都是本地的,UI可以直接调用,现在按功能拆分成独立的服务,跑在独立的一般都在独立的虚拟机上的 Java进程了。客户端UI如何访问他的?后台有N个服务,前台就需要记住管理N个服务,一个服务下线/更新/升级,前台就要重新部署,这明显不服务我们 拆分的理念,特别当前台是移动应用的时候,通常业务变化的节奏更快。另外,N个小服务的调用也是一个不小的网络开销。还有一般微服务在系统内部,通常是无 状态的,用户登录信息和权限管理最好有一个统一的地方维护管理(OAuth)。

所以,一般在后台N个服务和UI之间一般会一个代理或者叫API Gateway,他的作用包括

  • 提供统一服务入口,让微服务对前台透明
  • 聚合后台的服务,节省流量,提升性能
  • 提供安全,过滤,流控等API管理功能

我的理解其实这个API Gateway可以有很多广义的实现办法,可以是一个软硬一体的盒子,也可以是一个简单的MVC框架,甚至是一个Node.js的服务端。他们最重要的作 用是为前台(通常是移动应用)提供后台服务的聚合,提供一个统一的服务出口,解除他们之间的耦合,不过API Gateway也有可能成为单点故障点或者性能的瓶颈。

一般用过Taobao Open Platform的就能很容易的体会,TAO就是这个API Gateway。

6.
服务之间如何通信?

因为所有的微服务都是独立的Java进程跑在独立的虚拟机上,所以服务间的通行就是IPC(inter process communication),已经有很多成熟的方案。现在基本最通用的有两种方式。这几种方式,展开来讲都可以写本书,而且大家一般都比较熟悉细节了,
就不展开讲了。

  • 同步调用
  • REST(JAX-RS,Spring Boot)
  • RPC(Thrift, Dubbo)
  • 异步消息调用(Kafka, Notify, MetaQ)

一般同步调用比较简单,一致性强,但是容易出调用问题,性能体验上也会差些,特别是调用层次多的时候。RESTful和RPC的比较也是一个很有意 思的话题。一般REST基于HTTP,更容易实现,更容易被接受,服务端实现技术也更灵活些,各个语言都能支持,同时能跨客户端,对客户端没有特殊的要
求,只要封装了HTTP的SDK就能调用,所以相对使用的广一些。RPC也有自己的优点,传输协议更高效,安全更可控,特别在一个公司内部,如果有统一个 的开发规范和统一的服务框架时,他的开发效率优势更明显些。就看各自的技术积累实际条件,自己的选择了。

而异步消息的方式在分布式系统中有特别广泛的应用,他既能减低调用服务之间的耦合,又能成为调用之间的缓冲,确保消息积压不会冲垮被调用方,同时能
保证调用方的服务体验,继续干自己该干的活,不至于被后台性能拖慢。不过需要付出的代价是一致性的减弱,需要接受数据最终一致性;还有就是后台服务一般要 实现幂等性,因为消息发送出于性能的考虑一般会有重复(保证消息的被收到且仅收到一次对性能是很大的考验);最后就是必须引入一个独立的broker,如 果公司内部没有技术积累,对broker分布式管理也是一个很大的挑战。

7.这么多服务,怎么找?

在微服务架构中,一般每一个服务都是有多个拷贝,来做负载均衡。一个服务随时可能下线,也可能应对临时访问压力增加新的服务节点。服务之间如何相互
感知?服务如何管理?这就是服务发现的问题了。一般有两类做法,也各有优缺点。基本都是通过zookeeper等类似技术做服务注册信息的分布式管理。当
服务上线时,服务提供者将自己的服务信息注册到ZK(或类似框架),并通过心跳维持长链接,实时更新链接信息。服务调用者通过ZK寻址,根据可定制算法, 找到一个服务,还可以将服务信息缓存在本地以提高性能。当服务下线时,ZK会发通知给服务客户端。

  • 客户端做:优点是架构简单,扩展灵活,只对服务注册器依赖。缺点是客户端要维护所有调用服务的地址,有技术难度,一般大公司都有成熟的内部框架支持,比如Dubbo。
  • 服务端做:优点是简单,所有服务对于前台调用方透明,一般在小公司在云服务上部署的应用采用的比较多。

8.这么多服务,服务挂了怎么办?

前面提到,Monolithic方式开发一个很大的风险是,把所有鸡蛋放在一个篮子里,一荣俱荣,一损俱损。而分布式最大的特性就是网络是不可靠
的。通过微服务拆分能降低这个风险,不过如果没有特别的保障,结局肯定是噩梦。我们刚遇到一个线上故障就是一个很不起眼的SQL计数功能,在访问量上升
时,导致数据库load彪高,影响了所在应用的性能,从而影响所有调用这个应用服务的前台应用。所以当我们的系统是由一系列的服务调用链组成的时候,我们
必须确保任一环节出问题都不至于影响整体链路。相应的手段有很多:

  • 重试机制
  • 限流
  • 熔断机制
  • 负载均衡
  • 降级(本地缓存)

这些方法基本上都很明确通用,就不详细说明了。比如Netflix的Hystrix:https://github.com/Netflix/Hystrix

9.WHY - 微服务的应用

这里有一个图非常好的总结微服务架构需要考虑的问题,包括

  • API Gateway
  • 服务间调用
  • 服务发现
  • 服务容错
  • 服务部署
  • 数据调用

时间: 2024-12-05 15:42:38

微服务学习和认识的相关文章

微服务学习笔记(一)

什么是六边形架构 “六边形架构”是 Cockburn大牛在2005年 提出的.该架构提供了一种将业务逻辑和具体输入输出技术分离的模式. 为什么采用微服务 现在大多数开发一个应用,哪怕是类似Uber或者淘宝的应用.基本上都是已单体模式开发.虽然在应用自身架构上采用了模块化设计,但在本质上他还是一个单体应用. 例如:如下图 这样的单体应用不好吗? 上图,是比较经典优秀的单体六边形架构.在很多公司实际上因为各种原因单体应用架构还没有达到这个水平.所以会有以下几个方面问题 1. 整体扩展性差,当应用越来

最全的spring微服务学习实战项目

学习spring的微服务的模块,包括:服务提供者.服务消费者.服务注册中心.路由网关.统一配置文件管理等. 每个模块都有说明文档,看下基本都知道怎么做,欢迎大家下载点赞,github地址 https://github.com/YaoZhenPeng/fsSpringCloud.git . 因为基于自己学习的目的,还会不断添加微服务.每个微服务可能都是对一个技术的使用学习的笔记,如会写一个专门学习电子流的微服务,学习的技术都会有readMe说明文档. 使不会的人,看一下就能入门学习.如果想加入一起

微服务学习之路(一)——微服务架构

最近一直在学习微服务,毕竟现在大家都在说分布式,集群等,分布式和集群的基本前提是微服务,所以有比较掌握微服务的基本原理. 先看一下微服务架构图,如下图: 微服务主要由以下几个基本组件: 服务描述.注册中心.服务框架.服务监控.服务追踪.服务治理. 1.服务描述 服务调用首先要解决的问题是服务如何对外描述.常用的服务描述包括RESTful API.XML配置已及IDL文件. 2.注册中心 注册中心解决服务的发布和订阅.服务提供者将自己提供的服务以及地址登记到注册中心,服务消费者则从注册中心查询所需

微服务学习

微服务架构是一种架构模式.提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合.为用户提供最终价值.本质是分布式系统. 整理的思维导图 持续交付的核心在于:小.频.快 参考自<微服务架构与实践>

微服务学习笔记系列-Spring Cloud优质项目推荐

Spring Cloud微服务架构集大成者,云计算最佳业务实践. image.png Spring Cloud Spring Cloud Config Spring配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储.Git以及Subversion. Spring Cloud Bus Spring事件.消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署. Eureka Netflix云端服务发现,一个基

微服务学习(一):微服务介绍

目录如下 软件架构的进化 微服务的优势和不足 微服务架构所带来的问题及解决方案 1.软件架构的进化 于笔者经历来看 架构大致从 单体架构 >MVC > 微服务 单体架构 单体架构特点在于所有功能业务打包在一个发布包里,部署在一个web容器中,运行在一个进程里.单体架构的优点在于 容易开发 -- 一个人就可以写了,但是你想想这个后期其他人维护.... 容易测试 -- 所有功能都在一个进程里嘛,测试就简单了 容易部署 -- 比如一个war包 丢服务器上就好了 缺点 维护困难 -- 代码量之后越来越

微服务学习(三)--micro和go-micro

一.区别 A.go-micro:微服务开发库 B.Micro:基于Go-micro开发的运行时工具集 二.Micro工具集组件 A.API:将http请求转向内部应用 1.API:将http请求映射到API接口 2.RPC:将http请求映射到RPC服务 3.event:将http请求广播到订阅者 4.proxy:反向代理 5.web:支持websocket反向代理 B.Web:web反向代理与管理控制 C.Proxy:代理风格的请求,支持异构系统只需要瘦客户端便可调用Micro服务 1. 注意

微服务学习三:springboot与springcloud集成之Eurake的使用(server端,client端)

这个多亏了网站上的一个大神的博客: http://blog.csdn.net/forezp/article/details/70148833 强烈推荐学习: 1.springcloud是什么,这个大家百度吧,我一会也说不明白,但是比dubbo更强大,包含了dubbo的内容,也包含了比dubbo更多的内容. 2.什么是Eurake?关于这个我觉得如果大家知道zookeeper就明白了Eurake的优势. springcloud集成了Eurake,所以对于服务的治理注册更方便简洁了,而且不需要安装,

.NET Core微服务之基于Consul实现服务治理

一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,比如 Airbnb的SmartStack等相比,Consul的方案更"一站式",内置了服务注册与发现框 架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等),使用起来也较 为简单. Consul用Golang实现,因此具有天然可移植性(支持Linux.windows和Ma