突然闲下来没事干,开个贴回答互联网后端技术问题

2019-10-27 21:13:24 +08:00
 axb
我是做什么的:微博系统开发资深技术专家,曾经负责过微博消息箱、直播互动(非一直播)、视频(非秒拍)的后端服务。

我能回答的:互联网后端工程、程序员工作相关的问题

不能回答的:微博的交互、运营、产品、来去之间等等技术无关的问题,我没有发言权,涉及到微博内其他团队的针对性技术问题我也无法回答。
19502 次点击
所在节点    问与答
221 条回复
yesicoo
2019-10-27 21:25:30 +08:00
如何防止掉发?以及掉了的头发怎么长回来?
takemeh
2019-10-27 21:27:56 +08:00
怎么做到增加机器能线性增加性能的?
axb
2019-10-27 21:32:21 +08:00
@yesicoo 医院就诊皮肤科,一般脂溢性脱发都会外用米诺地尔,内服非那雄胺。

但更重要的是尽快接受“该掉还是会掉的”这个现实,保持心态乐观就好。
EminemW
2019-10-27 21:34:19 +08:00
代码优化,从哪些方向入手
kindjeff
2019-10-27 21:35:31 +08:00
做「你关注的某某人评论了某某人」之类的和几度人际关系相关的复杂功能的时候有没有遇到哪些性能上可能的问题
zixianlaiye
2019-10-27 21:36:28 +08:00
视频存储和提供有什么难点嘛,常年 mysql 中 varchar 选手想了解下
lovelife1994
2019-10-27 21:38:39 +08:00
分布式事务这块是怎么处理的呢?是由业务系统去做一致,幂等之类的保证吗?还是有统一的中间件或框架呢?
iPhoneXI
2019-10-27 21:41:00 +08:00
视频类的后端开发和其他图文为主的社区产品后端开发,架构、技术选型上有哪些不一样的地方
okoook
2019-10-27 21:42:35 +08:00
楼主有参与用 serverless 搭建后台系统吗?或建立部分 serverless 服务
axb
2019-10-27 21:43:07 +08:00
@takemeh 线性扩容有两种情况,一种是“无状态”服务,比如常见的 web 后端;另一种是“有状态服务”,比如 mysql 这种数据库。

对于无状态服务,一般只要解决了“服务发现”功能,在服务启动之后能够把请求量引到新服务上,就可以做到线性扩容。常见的服务发现包括 DNS 调度(通过域名解析到不同机器)、负载均衡调度(通过反向代理服务转发到不同机器)或者动态服务发现(比如 dubbo ),等等。

对于有状态服务,除了要解决服务发现问题之外,还要解决状态(数据)迁移问题,迁移又分两步:先是数据拆分,常见的都是用哈希或者一致性哈希把数据打散。然后是迁移,常见的办法有快照和日志两类迁移方式。也有一些数据库直接实现了开发无感知的状态迁移功能,比如 hbase。
ssdde
2019-10-27 21:43:42 +08:00
微博酷燃视频 PC 网页端可以增加一个搜索框吗,比如我想搜索“水煮肉片”。有搜索框会方便很多,不然每次都只能到百度里打一大堆
takemeh
2019-10-27 21:45:21 +08:00
@axb 多谢, 长见识了
axb
2019-10-27 21:48:33 +08:00
@EminemW 代码优化分为几个层次。

初期的优化主要集中在功能上,不写 bug。
然后是鲁棒性,在异常情况下不写 bug。
然后是性能,提高系统吞吐量,或者执行降低延迟。
然后是可维护性,在团队开发过程中降低其他人的理解难度,再做好一些,通过设计做到模块解耦,降低删除无用代码的难度。
然后是可扩展性,能够预测系统或者业务的发展方向,提前设计好锚点,让系统能够通过扩展而不是修改的方式增加功能。

再往后就是各自的境界了,我至今也还没参透……
ebony0319
2019-10-27 21:51:26 +08:00
可以透露一下新浪短链接的一些思路么
axb
2019-10-27 21:53:04 +08:00
@kindjeff 这肯定是有性能挑战的,比如“你关注的人也在关注”、“你关注的人最近发的微博”等等,都可以理解是二度关系。主要挑战点是数据的扇出量会比较大,我关注了 1000 人,这 1000 人又每人关注了 1000 人,那就是要 100 万的数据做处理。解决办法要么是减少扇出(比如限制关注人数量),要么是离线算数据,在线取结果。
richangfan
2019-10-27 21:53:48 +08:00
PHP 程序员做 websocket 应用是学习 swoole 还是直接换门语言?
greatdancing
2019-10-27 21:56:08 +08:00
后悔成为软件工程师吗
patx
2019-10-27 22:03:06 +08:00
怎么做才能做到不同地区,用户播放视频都比较流畅?会用到类似 CDN 的部署架构?
coderqbc
2019-10-27 22:04:20 +08:00
应用服务器的数据库连接池应该设多大?看了一篇译文 https://www.jianshu.com/p/a8f653fc0c54 的观点是"连接数 = ((核心数 * 2) + 有效磁盘数)", 不知道实际一般是不是这样计算
axb
2019-10-27 22:05:31 +08:00
@zixianlaiye 视频存储和播放难点要分开说。

对于分布式文件系统来说,有几个难点。
一个是文件大带来的执行效率,比如用户上传一个 10G 的文件,要 1 秒之后立刻能够访问,需要做一些性能优化的策略
一个是可用性,在某台机器宕机之后不能影响用户数据,需要有数据迁移和冗余的策略。
一个是文件多带来的元信息膨胀,分布式文件系统都要保存每个 key 的元信息(比如存在哪台机器上),当文件超过几百亿之后也会带来元信息存取的压力。

而播放一方面是整体缓存架构和调度策略的选择,另一方面的难点主要是对于网络(在目前场景下,主要是 tcp 协议)的理解、对协议(比如 http/http over quic )的理解和策略的选择。

当然,在国内 isp 环境下,更多的还是与人斗,其乐无穷。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/613460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX