小弟对于高性能服务器的构建比较感兴趣,比如我们是如何实现一秒十几亿的应答的?需要什么特殊的手段吗?求各位大神指教,多谢
多台机器,分布式,负载均衡等。一台机器没法支持
好问题,等待大牛详细解说
这个要看需求。高性能是一个宽泛的概念。比如对于Google,它更关注的是吞吐量,换言之,上亿的人同时使用搜索引擎,但是这些人是独立使用的,每个人的搜索结果不用汇总,也不必太计较结果的完整性。
一些场合,比如12306网站,不但要有高吞吐量,而且要确保数据完整性,显然付了钱没出票,或者出了票没扣钱都是不可接受的。也不能把一个车次的一个座位卖给两个人。
另外一些场合,比如蛋白质模拟,或者虚拟核试验,这些场合需要对数据汇总,那么显然要用更高速的架构连接节点,而前述的那种松散的分布式架构显然就不适合了。
限于你理论知识的不足,只能科普性地说这么多。如果你真的想了解,等你去修习大学的计算机科学的课程。
单机服务器都有性能极限,即使服务器机子性能再好也会有物理极限问题。第一步就是“分布式处理”,将十几亿的请求,分发给十几台服务器进行处理。其中实现数据分发的操作就叫“负载均衡”。数据--->负载均衡器--->服务器集群。基本原理就是这样,但是问题总还是会有的,举些列子
1:带宽瓶颈问题:如果请求1000亿/S,而带宽瓶颈导致只能处理100亿/S。那么
域名映射多IP地址方式,实现分流
压缩请求数据
返回请求数据时,你发现需要返回200K的数据,而其中180K都是千篇一律的静态数据,就让CDN来代理这180K的数据,你只需要返回20K数据,剩下的数据各地的CDN帮你传给用户就好了。
2:通常用HTTP进行计算机通信,如果觉得HTTP效率不高,那么很可能就会引入MQ
以上属于应用层上的分布式,经典的例子就是 LVS + Nginx + Keepalive + Tomcat 实现高性能,高可用WEB站点。可能这里再加一个Redis或者Memcache实现Session独立,就更为完美。
由于你的应用层属于百亿级请求。你会发现数据库在高并发上性能已经跟上不上了,这个时候,你就会分表分区、或者NoSQL数据库等方案来满足存储需求。分表分区或者NoSQL慢慢的单机走向分布式数,最终编程分布式NoSQL(这里就不提PostgreSQL这些技术)。HBase,MongoDB这些就慢慢走入视野了,当然很多基础数据依然会存储在关系数据库中,只是将数据增长快速,数据量级比较大的数据放入到NoSQL中。NoSQL还可以用来解决很多业务问题,不单单是存储而已
上面问题的解决了,你会发现企业需要搭建数据仓库,而数据仓库中数据量级非常庞大,几乎任何数据处理都变成了分布式(我把数据仓库和大数据看成一个量级)。在数据仓库前面架设大数据平台,让各系统为大数据平台攻数,而大数据平台再为数据仓库攻数。或者直接在大数据平台中建数据仓库都是不错的方案,因为大数据思想与技术,更适合现在