网站开发动静分离实践

1. 动静分离的实现思路

动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。

动静分离的一种做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则静态资源的请求全部请求nginx服务器,达到动静分离的目标。

1.1 静态资源部署至CDN上

我......

RPC是什么

1. RPC

RPC (Remote Procedure Call)是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。RPC是一个分布式计算的CS模式,总是由Client向Server发出一个执行若干过程请求,Server接受请求,使用客户端提供的参数,计算完成之后将结果返回给客户端。RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。

1.1 RPC的调用流程

多台服务器查询日志

互联网行业基本都是采用分布式部署,一个应用有很多台服务器,多的会有上百台。一旦线上出现case,很可能需要查询日志,但是一下子这么多机器查起来费时费事。

现在我们使用下面的脚本直接就可以拉到相关机器的日志。

trick

code

加入我们有sb1,sb2,sb3三台机器:

for server in sb1 sb2 sb3; do

ssh "$server" grep 'test' /data/applogs/sb/app.lot

done

这样一下就可以拉到所有机器的日志

问题

这段代码有个小问题,一般线上服务器都需要用......

我们需要什么样的微服务

微服务到底应该是多大,一种简单的划分方法是项目代码在100-300行。这个划分方式肯定是不合理的,但也表现了微服务的一个核心思想——服务尽量的小。

1. 微服务架构的特点

领域驱动设计

单一职责原则:每个服务只负责自己单独的部分,这也是SOLID原则之一;

明确发布接口:每个服务都会发布一个定义明确的接口,消费者只需要关心接口即可;

独立部署、升级、扩展和替换:每个服务都可以单独部署及重新部署而不影响整个系统。这使得服务很容易升级;

服务相互解耦;

轻量级通信:服务通信使用轻量级的通信协议,例如,同步的REST,异步的AMQP、STOMP、MQTT等。

这些使得微服......

分布式系统接口幂等性

1.幂等性定义

1.1 数学定义

在数学里,幂等有两种主要的定义:

- 在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和1。

即 s *s = s

- 某一元运算为幂等的时,其作用在任一元素两次后会和其作用一次的结果相同。例如,高斯符号便是幂等的,即f(f(x)) = f(x)。

1.2 HTTP规范的定义

在HTTP/1.1规范中幂等性的定义是:

A request method is considered "idempotent" if the intend......