反向代理与应用层

反向代理

Reverse Proxy 是一种可以集中调用内部服务,并提供统一公共接口的 Web 服务器。来自客户端的请求先被反向代理服务器转发到可响应请求的服务器,然后再把服务器的响应结果返回给客户端。

带来的好处包括:

  • 增加安全性:隐藏后端服务器的信息,屏蔽黑名单中的 IP,限制每个客户端的连接数;
  • 提高可扩展性和灵活性:客户端只能看到反向代理服务器的 IP,这使你可以增减服务器或修改它们的配置;
  • SSL 终结:解密传入的请求并加密服务器响应,这样的话后端服务器就不必再执行这些潜在高消耗运算了(不需要再每台服务器上安装 X.509);
  • 压缩:压缩服务器响应;
  • 缓存:直接返回命中的缓存结果;
  • 静态内容:直接提供静态内容(HTML/CSS/JS、图片、视频等)。

反向代理与负载均衡

  • 当你有多个服务器时,部署负载均衡器非常有用。通常,负载均衡器将流量路由给一组功能相同的服务器上;
  • 即使只有一台 Web 服务器或应用服务器时,反向代理也同样有用;
  • Nginx 和 HAProxy 等解决方案,可以同时支持七层反向代理和负载均衡。

缺陷:反向代理

  • 引入反向代理会增加系统的复杂度;
  • 单独一个反向代理服务器仍可能发生单点故障,而配置多台反向代理服务器会进一步增加复杂度。

应用层

将 Web 服务层与应用层分离,可以独立缩放和配置这两层。添加新的 API 时,只需要添加应用服务器,而不必添加额外的 Web 服务器。

单一职责原则提倡小型、自治的服务共同合作。小团队通过提供小型的服务,可以更激进地计划增长。

应用层中的工作进程也可以实现异步

微服务

Microservices 可以被描述为一系列可以独立部署的小型模块化服务。每个服务运行在一个独立的线程中,通过明确定义的轻量级机制通讯,共同实现业务目标。

例如,Pinterest 可能有这些微服务: 用户资料、关注者、Feed 流、搜索、照片上传等。

服务发现

像 etcd,Consul 和 ZooKeeper 这样的系统可以通过追踪注册名、地址、端口等信息来帮助服务互相发现对方Health Check 可以帮助确认服务的完整性和是否经常使用一个 HTTP 路径。

etcd 和 Consul 都有一个内建的 key-value 存储,用来存储配置信息和其他的共享信息。

缺陷:应用层

  • 添加由多个松耦合服务组成的应用层,从架构、运营、流程等层面来讲将非常不同(相对于单层系统);
  • 微服务会增加部署和运营的复杂度。