微服务

服务发现:Consul比JHipster Register有点多,但是后者有GUI。

microservice gateway负责处理web流量,并提供一个angular应用。

jhipster registry是一个独立的引用,所有的应用都在registry上面注册,并且从这里获取配置信息,它还提供一个监控界面。

jhipster uaa是一个用户验证和授权的系统,使用OAuth2协议,这也是我使用微服务的初衷。

微服务处理rest请求,是无状态的,所以可以有多个实例,用来处理繁重的负载。

jhipster console是一个监控和报警控制台,基于elasticsearch,logstash,kibana,这个应该很有价值,需要用用看。

网关和微服务都需要事先注册到registry。

网关负责http请求的路由,从而找到微服务,并把请求交给他。如果相同名称的微服务有多个,网关会使用Netflix Ribbon

做负责均衡;如果有为服务crash了,网管会用Netflix Hystrix有效地移除这些微服务。学名叫circuit breaker.

每个网关都能够监控http路由和微服务实例,这可以通过admin > gateway菜单来达成。

网关还能对请求的速度进行限制,可以按照ip地址,也可以按照登陆的用户进行限制,这项功能使用Bucket4j和Hazelcast来达成。

如果请求过快,网关会发送http 429表示太多的请求。

网关控制每个微服务,暴露哪些api,不暴露哪些api。

服务发现:jhipster registry

三个作用:

1. Eureka服务器

2. spring cloud config服务器

3. 微服务应用程序的管理服务器

开发模式下,这个registry会在本地目录central-config中找配置信息。

产品模式下(prod),会从git仓库中加载配置信息,代码中默认git仓库为:

https://github.com/jhipster/jhipster-registry-sample-config

真正自己的产品上线时,需要改成自己的git仓库,这个位置在src/main/resources/config/bootstrap-prod.yml文件里面编辑。

也有docker-compose方式可以运行registry,在研发状态下用./mvnw来运行regsitry。

打包就用./mvnw -Pprod package,但是docker hub上面已经有现成的包了,而且提供了docker-compose文件,改吧改吧就行了。

在产品上registry实例必须部署到云上(真的?必须在cloud foundry或者heroku上面?),

网关是如何知道有哪些微服务存在,以及那些微服务实例活着呢?答案是通过jhipster registry., 这个在技术上是如何实现的呢?答案是通过Hazelcast分布式内存缓存来达成的。

registry还是一个spring config服务器,每当微服务应用启动时,他们需要首先连接到registry上面获取运行时的配置信息,这个不光对微服务,网管也是一样。

配置格式就是spring boot的格式,一般都是写在yml文件中的,存储在一个集中位置。

到底是从本地文件取配置信息,还是从git中获取配置信息,这是在bootstrap.yml文件中定义的,具体在:

spring.cloud.config.server.composite属性中。

在哪里定义某个微服务的配置信息呢?比如一个微服务叫做ms1, 那么在git中添加一个ms1-prod.yml文件,这个文件就是产品版的ms1启动时加载的配置文件,

如果嫌弃每个微服务一个配置文件麻烦,可以把所有的配置信息定义在application[-dev|prod].yml文件中。

网关的路由信息也可以按照这种方式配置。

UAA特点:

1. OAuth2

2. 集中验证

3. 无状态

4. 区分用户和机器

5. 细粒度的访问控制,授权是在微服务中进行的,但是微服务不应该自己去识别用户,只需直接授权就行。

6. 可扩展,防止单点失败

所有访问微服务的客户端(web-app,内部,等等)都需要在UAA中定义。

用户访问通过roles角色和RBAC进行配置。role based access control

机器访问通过scopes范围和RBAC进行配置,

复杂访问通过ABAC来配置,attribute-based access control, 比如调用hasRole("ADMIN")和hasScope("shop-manager.read")

UAA干了三件事:

1. 提供用户domain信息,包含user,account资源,在有jwt验证的前提下。

2. 为OAuth2实现AuthorizationServerConfigurerAdapter,定义了基本的客户端(“web_app"和”internal")

3. 为所有别的微服务提供jwt 公共密钥 /oauth/token_key

启动微服务之前,必须先启动UAA,UAA  ---》 microservices,这是因为别的为服务需要先获取jwt公共key。

hystrix: a circuit breaker system solving fall-back scenarios on service fails

断路器,解决单点服务失败

加入一个微服务调用另外一个微服务的端点EndPoint

需要用到Feign客户端,就和repository类似。定义接口。另外需要定义

@EnableFeignClients,否则会报错,说需要定义FeignClient的Bean,就是因为ComponentScan不认识@FeignClient。

另外

@FeignClient(name = "hduaa"), name就是另外一个服务的名字。

另外Feign和Hystrix一起用的时候,需要设置

feign:
    client:
        config:
            default:
                connectTimeout: 160000000
                readTimeout: 160000000

另外需要设置:

hystrix:
    command:
        default:
            execution:
                timeout:
                    enabled: false

否则会导致TimeOut错误。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

novodexx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值