一. 微服务html
二. Api Gateway前端
三. Kong 的使用nginx
一. 微服务数据库
对于一些传统的 大型项目,传统的方式会有一些缺陷,好比说 新人熟悉系统成本高(由于整个系统做为一个总体,彼此会有必定的牵连),项目重apache
启时间长,重构困难(对于一个新技术的引入,可能须要对整个项目推到重来),不易于更换新的技术,而且整个项目会慢慢变成巨无霸。后端
因此说就会有微服务这种概念,一个服务实现一个不一样的特性或者功能。每个独立的微服务都是一个小型应用。一些微服务可能会暴露一些api 给api
其余的一些微服务或者是客户。以下图1(把各个业务拆分):安全
对于微服务,目前 像Netflix ,亚马逊,ebay 等都有应用。网络
固然,微服务也有必定的缺陷,好比说 每一个服务(每一个应用) 若是都有一个 数据库的话,那么如何维持 数据库事务。再好比说,服务之间的调用可负载均衡
能会因为 网络的缘由变得不可达,那么 代码中要额外增长 请求失败的代码。
二. Api Gateway
api gateway 即 api 网关。全部的请求首先会通过这个网关。这有点相似于前端控制器模式,也有点相似于 Facade模式。以下图2所示:
因为全部的请求会先通过这个 api 网关,因此 能够在 这里作 权限控制,安全,负载均衡,请求分发,监控等等。
那么,为何要用 这个 api gateway 这个东西,主要缘由在于 一个客户能够直接请求每个服务。每个服务都有一个 url。这些url 会和 负载均
衡设备相映射。为了获得产品信息,客户须要发不少的 request 请求。这样就不是很好。另一个问题就是 可能协议不一样,不必定是 http,好比说可能
因为防火墙或者什么的限制,可能须要用到其余的协议。再另外,之后重构的时候可能要拆分接口,或者合并接口,因为客户端和 API 直接打交道,因此
比较难。
因此说,如上 图1 加入了 api gateway 就能够变为 以下图3所示:
固然,任何技术都有缺陷, api gateway 也是同样,好比说 容易成为性能瓶颈。
三. Kong 的使用
Kong 是一个现成 的 api gateway 的解决方案,它在 nginx 上进行了开发。
api gateway 的实现方式有不少种,好比说 JVM 上能够用基于NIO 的框架好比Netty,Vertx,Spring Reactor,JOSS Undertow。如今一个比较流程的没有基于 JVM 的就是 NodeJs。其余的还有 Nginx Plus。
如下介绍 Kong 的使用。
3.1 安装 Kong
3.2 加入 API
参考:https://getkong.org/install/ ,里面写得比较详细了,可是要预先安装一个 Cassandra 数据库(介绍:http://cassandra.apache.org/)。安装以后,Kong 项目会监控两个端口,一个是 8000,一个是 8001。 8000端口是能够给用户访问,就是说用户发送请求先到 Kong 项目的 8000 端口,然
后Kong 项目帮你转到你的后端应用api。 8001 端口是管理端口,好比说,管理员能够经过 8001端口来获得你加入过的 api。
参考文档:https://getkong.org/docs/0.5.x/admin-api/ , 里面介绍了 api 的管理,包括 增删查改。下面介绍我第一次 使用时 还有有些不清楚的点:
3.2.1 列出 所加过的 api
curl localhost:8001/apis/
单个加入:
curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://camp.uats.cc' --data 'request_path=login'
--url:http://localhost:8001/apis/ 固定的,加入 api 就得写这个,表示给 kong管理。
upstream_url:表示咱们的网站。至关于一个请求前缀。
request_path:就是具体咱们的 api。
curl -i -X POST --url http://localhost:8001/apis/ --data 'upstream_url=http://183.131.76.124:4100/' --data 'request_host=183.131.76.122'
curl -i -X DELETE localhost:8001/apis/00f90ca9-cf2d-4830-c842-3b90f6cd08af后面 这个串表示 加入的api的 id。
四. 参考:
1. API Gateway 模式: http://microservices.io/patterns/apigateway.html
2. Nginx: https://www.nginx.com/blog/introduction-to-microservices/
3. Kong 项目官网:https://getkong.org/