springcloud~演化的微服务架构
微服务
将整体功能按着模块划分成多个独立的单元,这些单元可以独立部署,它们之前通过轻量级的web api方式进行通讯,对于微服务框架来说,最流行的就是springcloud和Service Fabric,前者是java开发,后者是.net的产品,今天主要介绍一下springcloud!
参考文章:https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do
- 功能即服务
- 配置中心
- 服务注册和发现
- 熔断器和监视器
- 解耦和异步通和的消息队列
- Api网关
- 统一授权服务
- Feign代替传统的Http
功能即服务-Functional Services
每个功能为一个服务,可以独立部署
| METHOD | PATH | DESCRIPTION |
|---|---|---|
| GET | /accounts/{account} | Get specified account data |
| GET | /accounts/current | Get current account data |
| GET | /accounts/demo | Get demo account data (pre-filled incomes/expenses items, etc) |
| PUT | /accounts/current | Save current account data |
| POST | /accounts/ | Register new account |
配置中心-Config Server
所有项目的配置信息都存储在远程,启动后同步到本地,有过期机制
spring:
application:
name: notification-service
cloud:
config:
uri: http://config:8888
fail-fast: true
服务注册和发现-Eureka
每个服务在启动后都被注册到eureka里,其它服务从eureka里通过服务名拿到服务的地址,进行调用
spring:
application:
name: notification-service
熔断器和监视器- Hystrix Dashboard
当服务进行相互调用后,它可能是多层次的调用,当某一层出现问题后,它下面的服务就不需要等待超时了,直接返回失败,这就是熔断器;而每个服务运行的状态可以使用监视器查看到。
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableHystrixDashboard
@EnableCircuitBreaker
public class ConsumerApplication { public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
解耦和异步通和的消息队列
队列服务用了比较流行的rabbitmq,比起kafka来说,它不仅更轻,而且更安全,有自己的ack机制!
Api网关
请求走统一的入口,然后根据配置去反向代理,一般地会在当前入口后加一个二级路径即可,在客户端看来他就好像是一个系统!
zuul:
routes:
notification-service:
path: /notifications/**
serviceId: notification-service
stripPrefix: false
统一授权服务
所有接口都可以被授权注解统一拦截,进行授权,一般采用oauth2的协议!
@PreAuthorize("#oauth2.hasScope('server')")
@RequestMapping(value = "accounts/{name}", method = RequestMethod.GET)
public List<DataPoint> getStatisticsByAccountName(@PathVariable String name) {
return statisticsService.findByAccountName(name);
}
Feign代替传统的Http
Feign是通过定义本地接口来模拟对远程接口的调用的,在生产环境中它会使用服务名+Feign接口路径来实现对远程资源的调用,而在测试环境里,他又会根据你mock的接口进行调用,这对于TDD开发是非常必要的,你在测试时不需要依赖外部资源!
@FeignClient(name = "statistics-service")
public interface StatisticsServiceClient {
@RequestMapping(method = RequestMethod.PUT, value = "/statistics/{accountName}", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
void updateStatistics(@PathVariable("accountName") String accountName, Account account);
}
几大服务组件的默认端口对应表
- localhost:80 - Gateway
- localhost:8761 - Eureka Dashboard
- localhost:9000 - Hystrix Dashboard
- localhost:8989 - Turbine stream (source for Hystrix Dashboard)
- localhost:15672 - RabbitMq management
感谢各位的阅读!
springcloud~演化的微服务架构的更多相关文章
- springcloud与docker微服务架构实战--笔记
看了<微服务那些事>之后,Spring boot和Spring Cloud的关系理清楚了,Spring cloud各个模块的作用也了解了. 但是,Spring cloud 与Docker的 ...
- 一. SpringCloud简介与微服务架构
1. 微服务架构 1.1 微服务架构理解 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在 ...
- SpringCloud与Docker微服务架构实战笔记
一 微服务架构概述 1. 单体应用架构存在的问题 结合:https://www.cnblogs.com/jialanshun/p/10637454.html一起看,在该篇博客中搜索“单块架构的优缺点 ...
- SpringCloud (一) :微服务架构
什么是微服务架构 简而言之,微服务架构风格就是将单一应用的开发分为多个小的服务,每个小的服务在自己的进程中运行并使用轻量级机制进行通信(通常是一个HTTP API源),这些服务围绕业务性能进行构建,并 ...
- 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)
一.架构演变 1.系统架构.集群.分布式系统 简单理解 (1)什么是系统架构? [什么是系统架构?] 系统架构 描述了 在应用程序内部,如何根据 业务.技术.灵活性.可扩展性.可维护性 等因素,将系统 ...
- 微服务架构-选择Spring Cloud,放弃Dubbo
Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经走了一年多. 在使用 Spring Cloud 之前,我们对微服务实践是没有太多的体会和经验的.从 ...
- 放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结
http://developer.51cto.com/art/201710/554633.htm Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经 ...
- 用SpringCloud进行微服务架构演进
在<架构师必须要知道的阿里的中台战略与微服务> 中已经阐明选择SpringCloud进行微服务架构实现中台战略,因此下面介绍SpringCloud的一些内容,SpringCloud已经出来 ...
- SpringCloud学习笔记(二):微服务概述、微服务和微服务架构、微服务优缺点、微服务技术栈有哪些、SpringCloud是什么
从技术维度理解: 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底 地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事, 从技术角度看就是一种小而独立的处理过程,类 ...
随机推荐
- MFC模块状态(一)
先看一个例子: 1.创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: #define IDD_DLL_DIALOG 2000 ...
- ID、句柄、指针、对象互相转换
/*************************************************************************************************** ...
- issubclass ,isinstance,反射
issubclass() 函数 issubclass() 方法用于判断参数 class 是否是类型参数 classinfo 的子类. 语法 以下是 issubclass() 方法的语法: issubc ...
- vscode 调试node.js
在开发的过程中,几乎不可能一次性就能写出毫无破绽的程序,断点调试代码是一个普遍的需求. 作为前端开发工程师,以往我们开发的JavaScript程序都运行在浏览器端,利用Chrome提供的开发者工具就可 ...
- 在Windows 8.1中安装必应输入法
鉴于目前Windows 8.1中自带的输入法存在一些Bug以及功能上的不完整性(比如,在Office 2013中删除掉错误的字符后快速输入第一个字母将丢失的问题:在QQ聊天窗口中文输入状态下快速输入省 ...
- HDU1025贫富平衡
做01背包做到的这个LIS,常见的n2会超时,所以才有nlogn可行 先来介绍一下n2 dp[i] 表示该序列以a[i]为结尾的最长上升子序列的长度 所以第一层循环循环数组a,第二层循环循环第i个元素 ...
- EBS中 EXCEL 格式报表输出的公用API
http://blog.itpub.net/10359218/viewspace-752601/ 最近的项目上写了一个公用的API,很久以前就用EXCEL发布过报表,但从没想过写API来简化... ...
- IO相关1(io类/流状态)
IO类: iostream 定义了用于读写流的基本类型,fstream 定义了读写命名文件的类型,sstream 定义了读写内存 string 对象的类型. IO 库类型和头文件: 头文件 类型 io ...
- lua 源码阅读顺序
https://www.reddit.com/comments/63hth/ask_reddit_which_oss_codebases_out_there_are_so/c02pxbp Online ...
- Python MySQL - 进行数据查询
#coding=utf-8 import mysql.connector import importlib import sys # reload(sys) # sys.setdefaultencod ...