什么是微服务

    微服务构架方法是以开发一种小型服务的方式,来开发一个独立的应用系统的。
    其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。
    这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。
    这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。
    对这些微服务我们仅做最低限度的集中管理。

架构优点

1. 易于开发和维护

    一个微服务只关注一个特定的业务功能。所以它的业务清晰,代码量较少。开发和维护单个微服务相对是比较简单的,而整个应用是由若干个微服务构建而成的,所以整个应用也会维持在可控状态。

2. 单个微服务启动较快

    单个微服务代码量较少,所以启动会比较快

3. 局部修改容易部署

    单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来讲,对某个微服务进行修改,只需要部署这个服务即可。

4. 技术栈不受限

    在微服务中,我们可以结合项目业务及团队的特点,合理选择技术栈。例如某些服务可使用关系型数据库,某些应用有图形计算的需求,可以使用Neo4j,某些应用服务有并发需求,可以采用内存数据库(redis、couchbase);甚至可以根据需要,部分微服务使用JAVA开发,部分微服务使用NodeJS进行开发。

5. 按需伸缩

    我们可以根据需求,实践细粒度的扩展。例如,系统中某个微服务遇到了瓶颈。我们可以结合这个微服务的业务特点,增加内存,升级CPU或者增加节点。

架构的挑战

1. 运维要求较高

    更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的正常运行;而在微服务中,需要保证几十个乃至几百个服务的正常运行与协作。

2. 分布式固有的复杂性

    使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都给我们带来了很大的挑战。

3. 接口调整成本高

    微服务之间通过接口进行通信。如果修改某一个微服务的API。可能所有使用了该接口的微服务都需要做调整。

4. 重复劳动

    很多服务可能都会使用到相同的功能。再这个功能并没有达到分解为一个微服务的程序,这个时候,可能各个服务都会开发这一功能,从而导致代码重复。

设计原则

    微服务有优点,也有缺点,我们需要避重就轻,所以在实践中,需要遵守一些原则。

1. 单一职责原则

    高内聚,低耦合
    遵守单一职责原则,将不同的职责封装到不同的类或模块中

2. 服务自治原则

    每个服务应当具备独立的业务能力,依赖与运行环境

3. 轻量级通信原则

4. 接口明确原则

    每个服务的对外接口应该明确定义,并尽量保持不变

Spring Cloud: http://projects.spring.io/spring-cloud/

GitHub: https://github.com/spring-cloud/

Spring Cloud学习笔记之微服务架构的更多相关文章

  1. 【Spring Cloud学习之一】微服务架构

    一.网站架构模式发展 单体应用-->SOA-->微服务 1.分布式项目与项目集群分布式项目:根据业务需求进行拆分成N个子系统,多个子系统相互协作才能完成业务流程子系统之间通讯使用RPC远程 ...

  2. 从 Spring Cloud 开始,聊聊微服务架构实践之路

    [编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. ...

  3. Spring Cloud Alibaba+Nacos搭建微服务架构

    1. Spring Cloud Alibaba 简介    Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eu ...

  4. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  5. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这 ...

  6. spring cloud+dotnet core搭建微服务架构:Api网关(三)

    前言 国庆假期,一直没有时间更新. 根据群里面的同学的提问,强烈推荐大家先熟悉下spring cloud.文章下面有纯洁大神的spring cloud系列. 上一章最后说了,因为服务是不对外暴露的,所 ...

  7. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

  8. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  9. spring cloud+dotnet core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

随机推荐

  1. 如何设置Oracle process值

    参考链接:http://blog.51cto.com/sunwayle/88870 su - oracle sqlplus system as sysdba; show parameter proce ...

  2. C#中IDisposable的用法-垃圾回收

    在Net中,由GC垃圾回收线程掌握对象资源的释放,程序员无法掌控析构函数的调用时机.对于一些非托管资源,比如数据库链接对象等,需要实现IDisposable接口进行手动的垃圾回收.那么什么时候使用Id ...

  3. gRPC官方文档(gRPC基础:C++)

    文章来自gRPC 官方文档中文版 本教程提供了C++程序员如何使用gRPC的指南. 通过学习教程中例子,你可以学会如何: 在一个 .proto 文件内定义服务. 用 protocol buffer 编 ...

  4. ubuntu - 14.04,创建菜单

    我们有的时候可能会把一个执行程序放到一个位置,随后我们希望在ubuntu的菜单里面加入它,这个操作非常简单: 我在Gnome桌面里,选择:“系统工具”->“首选项”->"主菜单& ...

  5. KMP算法不同写法之间区别

    网上之所以有这么多版本的KMP算法,是因为有的人写的是最大长度串版本的,有的人写的是next数组版本的(具体区别看下面博文),有的人写的是next优化版的,有的人写的是未优化的,不同人写的循环方法不同 ...

  6. THINKPHP 框架的模板技术

    //echo C('name'); App/Action/IndexAction.class.php文件夹下的 URL模式 //输出URL模式//echo C('URL_MODEL'),'<br ...

  7. 【以太坊开发】区块链中的预言机:Oraclize原理介绍

    智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来 ...

  8. 【bzoj4939】【YNOI2016】掉进兔子洞(莫队)

    题目描述 您正在打galgame,然后突然发现您今天太颓了,于是想写个数据结构题练练手: 一个长为 n 的序列 a. 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个 ...

  9. web安全-点击劫持

    web安全-点击劫持 opacity=0 iframe是目标网站 被内嵌了 1.用户亲手操作 盗取用户 视频 2.用户不知情 >* 引导点击 其实点击的是覆盖在下面opacity=0的ifram ...

  10. 剑指offer —— 二维数组的查找

    1.问题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 2.思路:只看题目本身 ...