百科问答小站 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语言的书? 
  为什么栈相对于堆很小? 
  程序员们平时都喜欢逛什么论坛呢? 
  C 语言线程间怎么通信? 
  为何void类型指针不能解引用,却可以参与强制类型转换? 
  如果有两颗药丸,一颗吃了让你写代码100%不出错,另一颗吃了能让你100%发现并修改bug,选哪颗? 
  废旧的 Android 手机能拿来干什么有趣的事? 
  既然有指针了,为什么c++还搞个引用出来? 
  为什么C++头文件喜欢把一个类型通过typedef定义出无数个新名字,这有什么意义吗? 
  C++在面向对象编程中,非虚继承和非虚析构函数的存在是为了解决什么问题? 能否都用虚继承和虚析构函数? 

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





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