洪强宁及其技术团队在网站架构、性能、可伸缩性上有着深入研究。他们始终致力于用技术改善人们的文化和生活品质,用自己的技术口味去传播分享更好的技术。

加入豆瓣

2005年初,阿北在啄木鸟社区发出豆瓣网上线的通知,那时洪强宁加入啄木鸟社区,并学习使用Python已经有三年时间了。

与同龄人相比,因为受学计算机的哥哥的影响,洪强宁上小学时就开始接触计算机,并且很早就有写程序的爱好,并确定了做软件研发工作的方向。在清华的开放实验室里(全国最早允许学生访问互联网的地方),洪强宁接触到了大量国外的网站和技术。那是“我技术能力成长最快的时间”,洪强宁说。大四时候,洪强宁开始了解Linux,学习和使用了后来在豆瓣广泛使用的Gentoo,由此对开源软件产生了浓厚的兴趣,并参与到一些开源项目中去。

清华毕业后,洪强宁一直做嵌入式系统。出于对软件开发的喜爱,他在2002年开始接触Python语言,但只是业余时间才用Python做一些东西。进入第二家公司后,洪强宁在负责新的项目技术选型时,完全采用了Python语言,并应用在嵌入式XP系统上。就这样他逐步完成了硬件工程师到软件工程师的转变,也让洪强宁对一种语言在计算机底层如何工作有了深入的理解,从此无论是工作还是业余项目都使用Python。

2004年8月啄木鸟社区开始运营,这是由黄冬发起的Python语言社区,同在社区里活跃的洪强宁,最终被寻找技术伙伴的阿北发现,经过几次沟通,洪强宁成为豆瓣第一位全职员工。

洪强宁评论这次经验时说,选择一种技术,其实也在被技术选择,进入到和自己有相同技术味儿的圈子。他评价之所以会和阿北共事,也是因为两人在技术口味上有相似的地方,比如同样热爱开源,喜欢Python和Gentoo等等。

除了Python以外,工作中还需要应用的其他技术,如数据库、缓存、分布式系统等等,这些都是洪强宁之前很少接触的,全部在工作中一边做一边学起来。

因为参与社区而加入豆瓣的洪强宁,也与社区一同成长,虽然作为话题参与者的机会减少了,但作为社区建设者的比重却在增加。进入豆瓣的员工很多也都是从Python社区而来,豆瓣也支持员工参与社区讨论,并组织了多次啄木鸟社区的线下活动,而且接管了社区服务器,以至在中国提到Python,几乎到了不能不提豆瓣的地步。可以说,豆瓣成为国内互联网使用Python语言的一面旗帜。

到豆瓣做改变

洪强宁来到豆瓣前,阿北已经形成了目前豆瓣整套的服务架构,并考虑了未来规模扩大后的影响。

那么洪强宁来到豆瓣之后将如何做呢?

除了负责系统平台、提供技术设施和保证系统运维外,洪强宁及其领导的团队,将阿北原有的架构体系中的所有部分都改造成分布式的,包括架构、数据库、缓存和应用服务器,并开发工具软件去简化管理和维护的问题。原有的技术选型,也不总是能满足不断增长的性能要求,MySQL对服务的支持存在问题,于是他们自己开发了Beans DB。最早使用的是单机服务器,还没有消息队列的概念,这也是后来才加入的。

就这样,豆瓣的改变一步步得以实现,并和技术创新一起持续着。

2007年11月13日,豆瓣用户达到一百万。洪强宁表示,那时压力的确很大,做技术的只有两三个人,大家总是跟在事件之后跑,还没有时间去考虑技术储备,常常是发生什么问题,就赶紧去查找原因,然后设计解决方案,熬夜成了家常便饭。随着公司的技术人员慢慢增多,特别是将分布式的架构实现后,这种紧张的状况才有了好转,洪强宁开始考虑一些未来的情况,比如用户量到达一定量级时数据库的改进。做Beans DB的想法就是那时提出来的。2008年开始设计、讨论,并在2009年部署到豆瓣的部分产品中了。

当被问到为何不在旧技术上做优化,而要提出新的解决方案时,洪强宁说,技术选型必须能满足需求,否则就是白谈。当若干技术方案都能满足需求时,豆瓣会采用集体决策的方式,大家一起讨论出结论,最后授予某个人去实现。并且在复杂和简单的技术之间,豆瓣倾向于选择后者,哪怕它不完美。Beans DB的作者Davis就是一个典型,他喜欢用极端简单的东西来解决技术问题。

早期架构的分布式转变完成后,洪强宁又遇到了未曾预想的变化。最为典型的是业务模式发生了很大转变,原来是主站,发展到后来包括社区、图书、电影、音乐四个相对分开的站点,导致开发方式也发生了很大的变化,团队面临很多网站需要开发维护的情况。洪强宁坦言,如何把以往的技术积累下来,转变成可适用于多个网站的技术产品,是目前摆在自己面前最核心的问题。
出于对豆瓣整体结构透彻的了解,洪强宁逐步走向技术管理者的岗位。他强调要发挥员工的主观能动性,而不是从上面压任务,让每个员工自己去发现什么是重要的,什么是应该做的,自己则更多担负起协调者的责任,给他们提供资源。正如他所欣赏的Linus Torvolds所言。“努力寻找可以信任的人,然后让他们放手去干……一旦我让某人负责维护某个项目,此人一定会拥有处理好日常事务的能力。”

员工的情况各有不同,如何保证人人都能自觉发挥工作中的能力呢?洪强宁解释说,他们把大量的精力放在招人上面,尽量使招进来的人是靠谱、愿意主动做事的。花大力气在招人上,带来的好处是可以省掉很多管理的琐事,只要让员工了解发展方向是怎样的、目标是怎样的。至于目标怎么完成,他自己会想办法找到最好的路径。

豆瓣气质

采访中,洪强宁提到一个词,“豆瓣气质”。

豆瓣招人的时候,无论笔试、面试,更多在考察这个人,第一技术基础是不是扎实;第二对于问题思考是否敏捷;第三除了职业修养,还包括对生活本身是否有热情,是否有奉献和共享的精神。所有这些都归结成一点,是否具有“豆瓣气质”。

如何描述这样一种气质呢?

洪强宁说,在豆瓣工作的人,不是说为谋生找了一份工作,写段代码拿工资回家吃饭,而要有追求和理想。而他自己无疑是具有豆瓣气质的典型,这正是如此,洪强宁身边聚合一群热爱技术和生活的人,他们始终致力于用技术改善人们的文化和生活品质,用自己的技术口味去传播分享更好的技术,推动中国互联网的发展。

洪强宁及其技术团队在网站架构相关推荐

  1. 【转】洪强宁:从程序员到架构师,从架构师到 CTO

    在文章开头,先介绍一位技术专家:洪强宁,爱因互动创始人 &CTO 洪强宁,11 年互联网从业经验,商用对话机器人创业中.前豆瓣首席架构师,前宜信大数据创新中心首席架构师,资深 Python 开 ...

  2. springcloud全局过滤_微服务技术SpringCloud 互联网网站架构演变过程

    网站架构演变过程 传统架构 传统的SSH架构,分为三层架构 web控制层.业务逻辑层.数据库访问层. 传统架构也就是单点应用,就是大家在刚开始初学JavaEE技术的时候SSH架构或者SSM架构,业务没 ...

  3. 基于Java技术的大型网站架构设计方案

    架构设计漫长路 最佳实践我来数 千万并发没问题 要点首推数据库 SQL语句要优化 索引创建有艺术 三大范式不可废 冗余字段难维护 查询过多怎么办 缓存使用是本固 频繁访问不用怕 每秒数千扛得住 更新插 ...

  4. 豆瓣首席架构师洪强宁谈Python语言

    在4月23日至25日召开的QCon Beijing 2010大会上, 来自豆瓣网的洪强宁为与会开发者分享了Python语言用于Web 2.0网站开发的经验.豆瓣网从开发初期,便选用Python作为主要 ...

  5. 大型网站电商网站架构案例和技术架构的示例

    大型网站架构是一个系列文档,欢迎大家关注.本次分享主题:电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功能需求外,还具备一定的高性能,高可用,可伸 ...

  6. 大型电商网站架构案例和技术架构【推荐】

    大型网站架构是一个系列文档,欢迎大家关注.本次分享主题:电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功能需求外,还具备一定的高性能,高可用,可伸 ...

  7. 大型电商网站架构分析

    电商网站架构案例.从电商网站的需求,到单机架构,逐步演变为常用的,可供参考的分布式架构的原型.除具备功能需求外,还具备一定的高性能,高可用,可伸缩,可扩展等非功能质量需求(架构目标). 根据实际需要, ...

  8. 大型分布式网站架构总结

    本文是学习大型分布式网站架构的技术总结.对架构一个高性能.高可用.可伸缩及可扩展的分布式网站进行了概要性描述,并给出一个架构参考.文中一部分为读书笔记,一部分是个人经验总结,对大型分布式网站架构有较好 ...

  9. 大型网站架构系列:电商网站架构案例(2)

    电网网站架构案例系列的第二篇文章.主要讲解网站架构分析,网站架构优化,业务拆分,应用集群架构,多级缓存,分布式Session. 五.网站架构分析 根据以上预估,有几个问题: 需要部署大量的服务器,高峰 ...

最新文章

  1. php http_get_vars,$_GET($HTTP_GET_VARS)和$_POST($HTTP_POST_VARS)的区别
  2. JavaScript 开发者最期待的年度大会,惊喜不断,错过还要等好久!
  3. 导出勾选密码永不过期的AD账户信息
  4. Mac电脑设置adb环境变量
  5. AI 云原生浅谈:好未来 AI 中台实践
  6. CORS 请求未能成功_CORS攻击概述
  7. 【转】刨根究底字符编码【2.0版】(1):开篇
  8. Android 之父裁员 30%:开发者如何避免“被离职”?
  9. java中一直gc_如果JVM在执行GC时一直在移动对象,那么它如何解析引用?
  10. DB2 表的常用命令
  11. .NET开发不可错过的25款必备工具,徐汇区网站设计
  12. 员工说不用兼容老文件,当主管的就信了?
  13. java权限管理selor_Java进阶学习第四天——DOM入门
  14. 开源 CMS系统 / SNS系统 / BBS系统
  15. blast2go本地安装,一个防火墙设置引发的血案
  16. 光无线通信理论知识学习1
  17. python小玩意——抠图换背景
  18. qt 进程打开excel_Qt 操作Excel
  19. c语言中循环体表达式,C语言的循环语句
  20. 个人总结 高阶PLSQL 数据库编程

热门文章

  1. 虚拟化技术 — 硬件辅助的虚拟化技术
  2. python对象模型_python 实现对象模型
  3. Verilog实现正弦波、三角波、方波、锯齿波的输出
  4. 云原生Java架构师——KubeSphere DevOps流水线部署RuoyiCloud
  5. 南宁第一职业技术学校计算机专业,南宁第一职业技术学校
  6. 【学习笔记】CSW网络目录服务
  7. 阿里巴巴《Linux命令行与shell脚本编程大全》高清版 PDF 开放下载
  8. 通过Google+设置壁纸报错
  9. Smalltalk for Everyone Else
  10. 说一下“==“和equals方法究竟有什么区别?