背景:因业务需要要根据用户源IP获得全球城市信息。应用每次主动活跃都会调用接口,外部访问量日过亿次访问。还会有大量的内部访问需求。
分布式:分布式架构设计符合高并发、松耦合、高可扩展
设计和实现:
IP信息的数据信息约有2个G,一般业务都是三层架构,应用层,缓存层,数据库层。
而我将架构设计为两层,将数据文件通过IP作为索引,调整数据结构,压缩后生成二进制文件。放到共享内存中,方便应用读取。
后端应用程序通过实现二分查找算法,从共享内存中搜索IP对应的信息,然后处理相关数据处理返回给Nginx.
优势:
应用直接通过内存查找相关信息,从而减少了耗时网络调用,提高并发。
节省了数据库服务,减少系统的复杂度,降低成本。
无状态服务,更方便业务在全球分布式的部署和访问。
分布式:
负载均衡通过IP散列到不同的Nginx服务器。
Nginx将请求分片到不同的应用服务
增加Nginx Cache,减少应用请求数量,提高系统并发度。
高可用:
负载均衡的流量和响应时间等监控
接入自研的运维监控系统,Nginx Cache的命中率,应用的响应时间,应用返回的可靠性等
通过自动扩展(Auto scaling)来提高并发度和可用性,从而应对高峰期,提高业务可用性,并合理降低成本。
IP库更新相对频繁,新服务启动时候会自动拉取最新的数据文件,自动更新。
文档:
完备的系统文档和故障处理手册,即使是新员工也可以了解系统特点、做好部署和维护、故障处理等工作。
后续:
App难免会有BUG,瞬间产生连续请求(相信我,这发生过)。即使瞬时的大访问量也不会导致系统DDOS。