微服务不同于单一架构应用, 是典型的分布式场景, 各服务之间通过IPC进行通信. 实现微服务的过程中, 我们需要解决以下问题:

  • 服务注册和服务发现.
  • 根据应用选择合适的通信协议和数据协议. 例如可以选用thrift, protocol buffer或REST.
  • 服务负载均衡. 一个服务一般会部署多个实例. 如果使压力均匀分布是需要考虑的问题.
  • 服务路由与限流.
  • 容错处理. 相对于单机应用, 分布式环境下错误发生的概率会大大提高, 服务宕机, 网络不可用的情况时常发生.
  • 服务监控. 各服务实例的性能指标, 例如请求响应时间, 请求并发数量, 以及服务实例的部署数量等.
  • 事务一致性. 一般来说这个问题需要我们结合业务自己处理, 框架不会给我们太多帮助.

好的微服务框架应该能帮助我们解决上面的全部或者大部分问题.目前常见的微服务相关框架:

  • Dubbo、DubboX
  • Spring Cloud(Netflix OSS)
  • Finagle
  • Motan
  • Thrift、gRPC

一、Dubbo优缺点:

Dubbo几乎是唯一能被称作全栈微服务框架的“框架”,它包含了微服务所需的几乎所有内容,而DubboX作为它的增强,增加了REST支持。

优点很多,例如:

  • 全栈,服务治理的所有问题几乎都有现成答案
  • 可靠,经过阿里实践检验的产品
  • 实践多,社区有许多成功应用Dubbo的经验

不过遗憾的是:

  • 已经停止维护
  • 不利于裁剪使用
  • “过于Java”,与其他语言相容性一般

二、Motan优缺点:

Motan是微博平台微服务框架,承载了微博平台千亿次调用业务。优点是:

  • 性能好,源自于微博对高并发和实时性的要求
  • 模块化,结构简单,易于使用
  • 与其他语言相容性好

不过:

  • 为“短平快”业务而生,即业务简单,追求高性能高并发。

三、Apache Thrift、gRPC优缺点:

Apache Thrift、gRPC等虽然优秀,并不能算作微服务框架,自身并不包括服务发现等必要特性。如果说微服务少不了Java,那么一定少不了Spring,如果说少不了Spring,那么微服务“官配”Spring Cloud当然是值得斟酌的选择。优点:

  • “不做生产者,只做搬运工”
  • 简单方便,几乎零配置
  • 模块化,松散耦合,按需取用
  • 社区背靠Spring大树

不足:

  • 轻量并非全栈
  • 没解决RPC的问题
  • 实践案例少

根据我们的目标,我们最终选择了Spring Cloud作为我们的微服务框架,原因有4点:

  1. 虽然Dubbo基础设施更加完善,但结构复杂,我们很难吃得下,容易出坑
  2. 基于Apache Thrift、gRPC自研,投入产出比很差
  3. 不想过早引入RPC以防滥用,Restful风格本身就是一种约束。

四、Finagle

关于Finagle的使用请参见:http://skaka.me/blog/2016/03/19/finagle1/

五、Spring Cloud

Spring Cloud是一个集成框架,将开源社区中的框架集成到Spring体系下,几个重要的家族项目:

  • Spring-boot:一改Java应用程序运行难、部署难,甚至无需Web容器,只依赖JRE即可
  • Spring-cloud-netflix:集成Netflix优秀的组件Eureka、Hystrix、Ribbon、Zuul,提供服务发现、限流、客户端负载均衡和API网关等特性支持;
  • Spring-cloud-config:微服务配置管理
  • Spring-cloud-consul:集成Consul支持

关于Spring-cloud的使用请参见:http://blog.xujin.org/sc/sc-fx1/

http://skaka.me/blog/categories/spring-cloud/

基于SpringCloud的微服务实践的更多相关文章

  1. 基于Spring-Cloud的微服务框架设计

    基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍

  2. 传统保险企业基于 Dubbo 的微服务实践

    本文整理自中国人寿保险(海外)股份有限公司深圳中心技术总监家黄晓彬在 Dubbo 社区开发者日深圳站的现场分享. 中国人寿保险(海外)股份有限公司负责香港.澳门.新加坡和印尼的业务开发,和国内业务不同 ...

  3. Java开发架构篇:领域驱动设计架构基于SpringCloud搭建微服务

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言介绍 微服务不是泥球小单体,而是具备更加清晰职责边界的完整一体的业务功能服务.领域驱动 ...

  4. 跟着我一步一步的搭建一个基于springcloud的微服务实例

    Table of Contents generated with DocToc microservicecloud 插件推荐 建立父工程Microservicecloud 搭建Employ员工服务 创 ...

  5. 基于spring-cloud的微服务(4)API网关zuul

    API网关是微服务架构中的很重要的一个部分,内部有多个不同的服务提供给外部来使用,API网关可以对外做统一的入口,也可以在网关上做协议转换,权限控制和请求统计和限流等其他的工作 spring-clou ...

  6. 基于spring-cloud的微服务(1) 服务注册中心eureka

    eureka是Netflix提供的服务注册中心组建,springcloud将其做了封装,作为自己的微服务架构中的一个注册中心组建 下面的例子在IDEA中启动一个eureka的实例,然后提供一个prov ...

  7. 基于SpringCloud的微服务架构实战案例项目,以一个简单的购物流程为示例

    QuickStart 基于SpringCloud体系实现,简单购物流程实现,满足基本功能:注册.登录.商品列表展示.商品详情展示.订单创建.详情查看.订单支付.库存更新等等. 每个业务服务采用独立的M ...

  8. 基于SpringCloud的微服务架构实战案例项目

    QuickStart 基于SpringCloud体系实现,简单购物流程实现,满足基本功能:注册.登录.商品列表展示.商品详情展示.订单创建.详情查看.订单支付.库存更新等等. github源码地址:h ...

  9. 基于spring-cloud的微服务(3)eureka的客户端如何使用IP地址来进行注册

    例子中和我写的代码里,使用的spring-boot的版本是2.0 Eureka的客户端默认是使用hostname来进行注册的,有的时候,hostname是不可靠的,需要使用IP地址来进行注册 name ...

随机推荐

  1. JavaScript生成GUID的方法

    一.生成GUID的方法一     JScript 代码   复制 function guid() { function S4() { return (((1+Math.random())*0x1000 ...

  2. nginx配置解决vue单页面打包文件大,首次加载慢的问题

    cnpm run build 文件过大,其中主要是vender.js有1.5M,代码部署到服务器,首次访问加载页面时比较慢,耗时6.5s左右,所以需要优化下. 1.Nginx开启gzip 找到ngin ...

  3. Back Track 5 之 Web踩点 && 网络漏洞

    Web踩点 CMS程序版本探测 Blindelephant 针对WORDPRESS程序的踩点工具,通过比较插件等一系列的指纹,判断版本. 格式: Python Blindelephant.py [参数 ...

  4. WordPress 如何搜索文章内容而不搜索页面

    如何在WordPress 中只搜索指定的文章类型?在http://www.wpbeginner.com上了解到通过WP提供的钩子"pre_get_posts"方法可能实现 该钩子方 ...

  5. 学习技巧-如何在IBM官网寻找学习资料

    场景:最近看招聘职位TM1比较火,于是就想找一下Cognos TM1的资料来拜读一下,然后论坛都是大价钱的金币,迫于无奈只好来到IBM的官网来寻求指导 http://www.ibm.com/us/en ...

  6. [Angular-Scaled web] 2. Architecture sub-modules

    Common models will be a sub models for category and bookmarks. Because they are used everywhere. For ...

  7. Activity基本跳转

    详细解释:http://blog.csdn.net/xiazdong/article/details/7664757 简单介绍activity的跳转,通过intent实现,详细的注释在代码中.涉及到a ...

  8. ZH奶酪:Linux新建用户+远程登录

    7.想在VBUbuntu中新建一个账户,但是用useradd命令发现没有权限,原来Ubuntu默认不是root权限登录,需要按照下边的教程才能新建用户. http://www.linuxidc.com ...

  9. Swift学习笔记(十五)——程序猿浪漫之用Swift+Unicode说我爱你

    程序猿经常被觉得是呆板.宅,不解风情的一帮人.可是有时候.我们也能够使用自己的拿手本领来表现我们的浪漫. 因为Swift语言是支持Unicode编码的,而Unicode最新已经支持emoji(绘文字) ...

  10. 算法笔记_209:第六届蓝桥杯软件类决赛部分真题(Java语言B组)

    目录 1 分机号 2 五星填数 3 表格计算 前言:以下代码仅供参考,若有错误欢迎指正哦~ 1 分机号 标题:分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列, ...