Thrift是一个由FB在09年开源的序列化/RPC框架,具有优秀的跨语言特性,现在已经成为apache基金会的子项目。这里先对Thrift本身做个简单介绍,其主要包括四个组件:protocol,transport,processor和server,其中,protocol定义了消息是怎样序列化的,transport定义了消息是怎样在客户端和服务器端之间通信的,processor是用户实现的消息处理器,执行业务逻辑,server来组装这些组件,主要是从transport接收序列化的消息,根据protocol反序列化之,调用用户定义的消息处理器,并序列化消息处理器的响应,然后再将它们写回transport。
本文主要关注server的实现,Thrift模块化的结构使得它能提供各种server实现,有如下几个:
就先从unix的Pthread库开始说起。
锁和条件变量是进行多线程应用程序开发时最常用的building block,在unix平台上开发多线程应用程序时最常用的就是unix提供的Pthread库,其中最为人熟悉两种线程同步机制就是mutex和condition variable。
mutex就是一个基本的互斥锁,当某个线程需要访问一个共享的资源时获取这个锁,处理完之后再释放锁,同一时刻只允许一个线程拥有锁,它保证了对资源的互斥访问,从而使得多个线程之间能够安全访问所共享的资源。
建立缓存系统是优化各种应用性能的常见手段,本文介绍nginx对被代理的后端服务所提供的缓存功能,即web content caches。这种缓存有两个好处:1)提升响应给客户端内容的性能,2)减少后端服务器的负载。这层的缓存策略需要视访问的内容而定,比如对于一些图片、js、css等静态内容,可以缓存相对长时间;对于一些完全私有、易变的内容,缓存有时不是一个好主意;还有一些非私有、但是动态生成、不定期变化的内容,缓存策略的选取就是个需要考虑的问题,这就是所谓的microcaching。