凡是努力过的人都有一个共同点那就是懂得天赋的重要性,没有天赋的人努力做的再好还不如人家随便搞搞,虽说努力不一定会成功,但不努力真的很舒服,有时候不逼自己一下都不相信自己还能把辣么简单的事情搞砸,聊聊高性能服务优化这个重大课题就是为了证明一下自己的技术实力,其实知道的真的就这么一点点。
这是一个严肃认真的课题,一个复杂深奥的课题,一个滋滋冒油的课题,营养而又美味,值得花费精力深入探索追求极致与完美。要说这年头硬件是越来越便宜了,服务器处理器随随便便几十个核,内存32G是最低消费,硬盘1T的起码好几块,网卡想驱几个驱几个,一加电呼呼响那动静跟飞机起飞似的。服务器集群化应用和管理越来越便利了,计算存储资源都动态调剂了,有必要为了提升几个点的性能费这么大劲吗?没错这话问的没毛病,确实没必要费那么大力气去整这玩意,瞎耽误工夫还不如读读《钢铁是怎么炼成的》呢,下面就聊聊一般可以从哪些方面入手来优化高性能服务。
1、修改系统默认单一进程可打开文件描述符参数以便允许进程创建更多的接入;
2、修改系统参数在不影响现有服务的前提下优化各种关闭状态实现尽快回收资源;
3、服务端初始监听套接字允许端口复用通过多进程多线程方式增加并行处理能力;
4、采用非阻塞的通信方式,事件驱动的集中管理方式,边缘触发的内核通知模式;
5、采用异步方式处理业务逻辑,尽量找事干处理器一刻别闲着,哪里有活立马干;
6、开发语言支持协程尽量以协程实现业务逻辑,协程是极轻量化线程性能提升明显;
7、优化套接的字属性并扩充读写缓冲区的空间,增加单位时间里数据的有效吞吐量;
8、采用零拷贝实现对套接字底层读写,减少数据在内核空间和用户空间的复制次数;
9、进(线)程绑定处理器内核,提高任务调度命中率,降低上下文切换带来的损耗;
10、谨慎选用同步机制以避免进(线)程间因争夺共享资源成为系统瓶颈,以后单聊;
11、根据操作的特性来合理选择容器类型用于存储各类资源,具体情况还需具体分析;
12、优化任务调度算法,优化进(线)程属性参数,适度并合理调配系统的计算资源;
13、欢迎补充。
上面提到的部分优化措施所对应的具体代码实现可以从http://git.oschina.net/gonglibin中“项目”或“代码片段”中找到,欢迎咎由自取。
前些日子有天下班在立水桥换乘,看见一个白白胖胖的小哥倒在站台上,上身T恤下身牛仔裤脚穿旅游鞋,红十字双肩包扔在旁边,躺在地上喘着粗气,一看就是那种天天久坐披星戴月早出晚归晒不着太阳的同行,后来在站务员的关照下慢慢缓过来了,所以说男人对自己下手也别太狠。
网上说长斑的香蕉对贫血高血压便秘和心绞痛效果更好,特地把刚剥开的香蕉又默默包了起来,着急吃的小伙伴们可以在表皮上画上黑斑效果应该是差不多的,天舟一号顺利升空了,国产航母也顺利下水了,上海上港给首尔FC瓷瓷实实上了一课,膀大腰圆的胡尔克壮的像头牛,五一国际劳动节要到了,假期还是一如既往工作和学习,老话说的好,世上无难事只要肯放弃,有时候人不努力一下都不知道绝望的滋味。