百科问答小站 logo
百科问答小站 font logo



大项目不允许使用C++STL 容器合理吗? 第1页

  

user avatar   giantchen 网友的相关建议: 
      

如果你有机会进Google,亲眼读一下Google File System的master的源码,就会知道中国坊间流传的很多关于C++的“经验/讲究”都是胡扯,包括题目中的这一条。顺便说一下,GFS 从2001年开始开发,当时就没什么STL忌讳。

我觉得你需要设法把“服务进程不能随便重启”这个条条框框打破,今后的日子就好过多了。否则一直被拖累,甚至造成安全问题。想想openssl最近一年出的那些状况,如由于不能重启而无法打上最新的安全补丁,那损失就大了。类似的情况还有bash的安全漏洞、时不时发布的内核安全补丁等等,评论中还列了其他一些需要重启的情况。

在Google,别说任何一台服务器可以随时重启,就是任何一个数据中心都可以随时下线维护,这才是服务可靠性的根源。

Site Reliability Engineering - O'Reilly Media
在用 STL 和 Boost 的,都是什么人? - 陈硕的回答
动不动就 32GB 以上内存的服务器真需要关心内存碎片问题吗? - 陈硕的回答

(八卦一下,在 GFS 论文的致谢一节中,最后一句是 Yoshka helped with early testing. 为什么别的致谢对象都有名有姓,单这一条有名无姓,答案在

blogspot.com 的页面

。)


user avatar   xtlisk 网友的相关建议: 
      

大胆点,你为什么不去怀疑前提的不合理呢?

首先应该挑战跑几个月不重启这种事情,为什么不重启呢,是服务进程状态必须维持,还是无法做到平滑升级?你们的系统总不可能不升级吧,而且C++任何系统也不保证说永远不会碰到core或OOM kill等莫名其妙没了的事情

所以换个角度,与其因噎废食,不如把根本问题解决了,如果你们能做到可以对外无感知地平滑升级,比如改为状态无关,或者出了问题简单重启就能恢复,那你的问题就不是问题

以前我在腾讯做过的几个服务器项目就是这样,如果数据逻辑可以分离,服务器随便重启不影响业务,就不会有这么多幺蛾子,当然也不是所有服务都能这么干,但是大部分业务进程是可以做到的,剩下需要常驻的那些,一般也都是成熟的组件服务,于是出现了不少鬼故事:

1 某项目更新代码只需要重启就行,于是同事连配置reload都懒得写了,每次更新配置直接kill -9然后重启

2 某项目内存泄露但泄得不是很快,大家也懒得管,crontab每天重启一次

3 进程挂了重启就行,不影响服务,某服务存在偶现core但是运维忘了配置告警,每次core了自动拉起,用户也没感觉到,直到几个月后磁盘被core文件填满了才发现




  

相关话题

  c#多播或event监听太多后gc和时间都会爆炸,那么比起List<Action>存在的意义是什么? 
  共用体只能同时储存一个值吗? 
  嵌入式linux内核在内存中运行地址0x30008000到内存起始运行地址0x30000000中的(0x8000=32k)怎么回事? 
  简单c++项目在Windows和Linux下编译连接怎样使用同一个Makefile? 
  求十亿内所有质数的和,怎么做最快? 
  把windows平台下mfc框架的代码移植到linux对编程小白来说难度很大吗?应该学习什么内容呢? 
  memcpy比循环赋值快吗?为什么? 
  MFC真的过时了吗? 
  Qt Creator为什么不能对c++11的auto类型做代码提示? 
  有什么像a=a+b;b=a-b;a=a-b;这样的算法或者知识? 

前一个讨论
既然低维生物无法想象理解高维生物,为什么会有高维生物这个概念呢?
下一个讨论
为什么g++能够优化到动态库里的STL?





© 2024-06-12 - tinynew.org. All Rights Reserved.
© 2024-06-12 - tinynew.org. 保留所有权利