V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
axb
V2EX  ›  问与答

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

  axb · 2019-10-27 21:13:24 +08:00 · 18828 次点击
这是一个创建于 1636 天前的主题,其中的信息可能已经有所发展或是发生改变。
我是做什么的:微博系统开发资深技术专家,曾经负责过微博消息箱、直播互动(非一直播)、视频(非秒拍)的后端服务。

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

不能回答的:微博的交互、运营、产品、来去之间等等技术无关的问题,我没有发言权,涉及到微博内其他团队的针对性技术问题我也无法回答。
220 条回复    2019-11-24 19:58:40 +08:00
1  2  3  
qq1340691923
    101
qq1340691923  
   2019-10-28 10:04:29 +08:00
那个六星教育的老师都称自己是微博出来的 php 架构师,吹捧 php,你怎么看
thinkmore
    102
thinkmore  
   2019-10-28 10:08:46 +08:00
@axb 想请教下几个问题
1. 微博的评论存储是 hbase 吗?或者其他的?
2. 请问您在设计过程中 /开发过程中有遇到什么难题吗?能分享下思路吗?
PickMio
    103
PickMio  
   2019-10-28 10:09:31 +08:00
以前一直用 c++ 做游戏, 现在想转互联网后端, 做 Go 或 Java, 但是投了简历一直也没消息, 互联网的那些技术栈也比较难实践, 有啥好的方法么...
hhyvs111
    104
hhyvs111  
   2019-10-28 10:10:56 +08:00
楼主,微博杭州机器学习研发部,C++开发怎么样?能学到东西吗?和百度的账户系统部相比呢? C++是不是基本上做不了后端?
xxdd
    105
xxdd  
   2019-10-28 10:11:41 +08:00
为什么微博居然有菠菜广告···
leexy
    106
leexy  
   2019-10-28 10:11:56 +08:00
什么是面向对象?
wangkai123
    107
wangkai123  
   2019-10-28 10:13:04 +08:00
微博每次挂是因为什么部分先扛不住了?
Rwing
    108
Rwing  
   2019-10-28 10:17:39 +08:00
@axb JAVA 的语法相比 kotlin 和 C#不是痛点吗?
@547911345 是的,只有这一个原因
Mystic
    109
Mystic  
   2019-10-28 10:22:29 +08:00
请问大佬,如果想重试大数据开发的话,平时应该多关注哪些技术栈呢,从服务端开发转过去有哪些地方需要了解提升的
micean
    110
micean  
   2019-10-28 10:26:32 +08:00
有没有应用过非 JDBC 的异步驱动?稳定性怎么样?
x537196
    111
x537196  
   2019-10-28 10:29:15 +08:00
@axb 请教两个直播相关的问题 1.用户的关注列表分页拉取时,如何把正在直播的主播前置到列表 2 主播的粉丝量很大时,开播如何及时推送给粉丝
axb
    112
axb  
OP
   2019-10-28 10:49:01 +08:00
@crclz 如果想往架构师方向发展(不做普通码农),应该是什么样的学习路线?我之前大致都了解了前后端的很多技术,但都不精细。我前段时间才发现自己在数据一致性上面忽略了很多东西;前几天才发现有个叫 DDD (领域驱动设计)的东西,学了以下发现以前写的思路很丑陋。所以有什么学习路线?(或者能不能给一些专有名词)

我觉着架构师主要是靠经验,其次才是学习。架构师的核心价值是在某个场景下构建合理的应用,如果没有架构的应用场景的话,那即使学了一堆名词,也只能硬套概念而不是解决问题,我觉着意义不大。但如果就是想了解这些名词的话,各种技术公众号或者微博关注一波,每天一大堆在上面扯名词的,有些名词我都不认识……
axb
    113
axb  
OP
   2019-10-28 10:50:23 +08:00
@Akiyu 可否分享一下平常浏览的技术站点?

基本上现在不会漫无目的的看了,要查什么信息就看什么站点……
比较关注竞品公司发的技术文章
axb
    114
axb  
OP
   2019-10-28 10:51:23 +08:00
@fhvch 你们团队有测试开发吗?如果有,请问他们都做些什么工作?他们的技术栈大概是怎么样的?

测试是另一个团队,他们做的事情是写测试框架、搭测试系统、写测试用例。
技术栈跟普通开发差不多。
axb
    115
axb  
OP
   2019-10-28 10:52:23 +08:00
@qq1340691923 那个六星教育的老师都称自己是微博出来的 php 架构师,吹捧 php,你怎么看

不清楚,微博里我不认识的架构师有很多。
axb
    116
axb  
OP
   2019-10-28 10:53:52 +08:00   ❤️ 1
@thinkmore 1. 微博的评论存储是 hbase 吗?或者其他的?
这是评论服务的范畴,不是我负责。我只知道历史上评论用过 mysql,后面改成什么样了不清楚。

2. 请问您在设计过程中 /开发过程中有遇到什么难题吗?能分享下思路吗?
招合适的人最难,其他都好解决。
axb
    117
axb  
OP
   2019-10-28 10:56:16 +08:00   ❤️ 2
@PickMio 以前一直用 c++ 做游戏, 现在想转互联网后端, 做 Go 或 Java, 但是投了简历一直也没消息, 互联网的那些技术栈也比较难实践, 有啥好的方法么...

先用 go 或者 java 做点实际的东西出来,比如我之前团队有个小伙之前也是用 C++,投我这边 Go 的职位。他业余时间用 Go 做了个 V2EX 的客户端,当场就要了。
axb
    118
axb  
OP
   2019-10-28 10:58:08 +08:00
@hhyvs111 楼主,微博杭州机器学习研发部,C++开发怎么样?能学到东西吗?和百度的账户系统部相比呢? C++是不是基本上做不了后端?

具体情况我不了解,我只能说机器学习研发部是目前公司的重点部门之一。offer 比较我给不了什么有价值的意见,抱歉……
axb
    119
axb  
OP
   2019-10-28 10:58:33 +08:00
@wangkai123 微博每次挂是因为什么部分先扛不住了?

这个我不能回答,抱歉。
axb
    120
axb  
OP
   2019-10-28 11:00:59 +08:00
@Mystic 请问大佬,如果想重试大数据开发的话,平时应该多关注哪些技术栈呢,从服务端开发转过去有哪些地方需要了解提升的

大数据开发这个职位挺缥缈的……我不清楚你说的大数据开发是指的数据分析、数据中间件、有大数据场景的后端应用还是什么别的。

第一个,一般就是流式处理框架,Hadoop 全家桶之类的数据处理框架。
第二三个,跟普通后端开发没啥本质区别。
IMCA1024
    121
IMCA1024  
   2019-10-28 11:01:24 +08:00
怎么看待 RESTful 风格架构规范这东西.
你所接触到的项目工程,达到 成熟度模型的几级?
是否觉得 HATEOAS 对前端来说不太友好
axb
    122
axb  
OP
   2019-10-28 11:02:13 +08:00
@micean 有没有应用过非 JDBC 的异步驱动?稳定性怎么样?

抱歉,没看明白你说的是什么……
axb
    123
axb  
OP
   2019-10-28 11:05:50 +08:00
@x537196 请教两个直播相关的问题 1.用户的关注列表分页拉取时,如何把正在直播的主播前置到列表
假设正在直播的主播不多,可以单独存正在直播的主播,插到关注列表前面。

2 主播的粉丝量很大时,开播如何及时推送给粉丝
1 想办法并行取粉丝关系,并行推送 2 优先推送核心用户 3 改成拉取模式,实时获取当前主播的直播状态
cwjokaka
    124
cwjokaka  
   2019-10-28 11:06:42 +08:00
大佬你好,我也问一个😄,如何根据具体业务来优化 VM
conanca
    125
conanca  
   2019-10-28 11:09:10 +08:00
请教个问题: “我的收藏”中做全文检索,怎么实现
axb
    126
axb  
OP
   2019-10-28 11:10:26 +08:00   ❤️ 1
@IMCA1024 怎么看待 RESTful 风格架构规范这东西.你所接触到的项目工程,达到 成熟度模型的几级?
我觉着这个东西比较理想化,实践过程里并没有过多的对接口做约束。因为我们是服务提供方,因此很多实践都依赖于调用发起方的能力。比如调用方说不支持 put,那就没法按 RESTful 风格写 put 接口。

是否觉得 HATEOAS 对前端来说不太友好
我觉着这个东西太过于理想化,没有实践过
axb
    127
axb  
OP
   2019-10-28 11:14:10 +08:00
@cwjokaka 大佬你好,我也问一个😄,如何根据具体业务来优化 VM

。。。看 VM 在这个业务场景下的表现有什么问题,然后优化就可以了啊?
如何根据场景发现问题:模拟场景,测试
如何根据问题做优化:用工具分析问题→调整参数→验证是否解决→调参就是解决不了→查看源码进一步分析问题→修改源码→验证是否解决。
axb
    128
axb  
OP
   2019-10-28 11:14:40 +08:00
@conanca 请教个问题: “我的收藏”中做全文检索,怎么实现

我对搜索架构一无所知,抱歉。
sunqimingcs
    129
sunqimingcs  
   2019-10-28 11:15:38 +08:00
最好的代码就是没有代码,没有代码就没有 bug,最好的优化就是删除代码,总之代码越少越好!!!
Kamitora
    130
Kamitora  
   2019-10-28 11:17:09 +08:00
应届生如何提高自己?看书总觉得是一个个点,学的技术很杂,前后端 /移动 app 都会一点,无法系统地整合。
英文水平很好,可无障碍阅读 /视听(印度方言除外)。Coursera,edx,Udacity...?
smallyu
    131
smallyu  
   2019-10-28 11:17:21 +08:00
请问您如何看待之前的微服务和目前提倡的无服务,以及目前火热的中台的概念?这些概念的价值如何,背后是技术的演进,还是营销的泡沫?了解学习相关的东西,可以构建起自己的技术壁垒吗?
vjnjc
    132
vjnjc  
   2019-10-28 11:17:50 +08:00
请问一下,假设一个集群里 a,b,c 三个服务(或者叫应用)都依赖于 d ( v1.0 )这个服务,现在需要把 d 这个服务,从 1.0 升级到 2.0。

目前我的操作流程是额外开一台机器用于跑 d ( v1.0 ),然后把 d 的所有机器都升级到 2.0,然后把 a,b,c 三个服务都升级到依赖于 d ( v2.0 ),再把 d ( v1.0 )这台机器关闭。

感觉这么做很麻烦,而且也不自动。因为 a,b,c 都依赖于 1.0 版本,所以在整个升级过程,d 服务的两个版本,1.0 和 2.0 都是存在着的。请问能介绍一下你们的经验吗?我这里用的是 dubbo,每个服务各有两台机器运行着。
yanluya
    133
yanluya  
   2019-10-28 11:18:17 +08:00
给大佬赞一个
phpdever
    134
phpdever  
   2019-10-28 11:24:33 +08:00
谢谢你的分享,学习到很多。
opengps
    135
opengps  
   2019-10-28 11:25:32 +08:00
围观大佬,由于我也负责过用户增长到单机能力之外的项目,对于扩容,前置机器的无状态扩容很容易实现了,所以专门请教下:后端扩容有什么好的方案和建议呢?
1,数据库变大,需要动态增加机器,怎样一种方案可以无感知增加?
2,数据量变大,查询效率如何维持?
3,老数据的删除,我们项目上有,不知道大佬的项目中怎么处理?
fishioon
    136
fishioon  
   2019-10-28 11:29:29 +08:00
@axb 同步再建个 github 仓库回答这些问题?翻评论比较累。。。
Yoock
    137
Yoock  
   2019-10-28 11:37:24 +08:00 via iPhone
@ebony0319 看我的 github,我实现了一个短链接的服务
awanganddong
    138
awanganddong  
   2019-10-28 11:54:51 +08:00
大佬,在小公司里边想要进阶,有什么比较平滑且接地气的方法

适用于普通人的。
Hsingx
    139
Hsingx  
   2019-10-28 11:57:28 +08:00
请教一下微博的 timeline 是怎么设计的?我在浏览当前 timeline 过程中关注了用户 A, 继续加载发现用户 A 的微博已经出现当前 timeline 中了。
axb
    140
axb  
OP
   2019-10-28 12:02:14 +08:00   ❤️ 1
@Kamitora 应届生如何提高自己?看书总觉得是一个个点,学的技术很杂,前后端 /移动 app 都会一点,无法系统地整合。

多实践,找个有点难度的问题解决,实践一段时间再回过头来看书,会有不一样的收获。
WhoMercy
    141
WhoMercy  
   2019-10-28 12:02:18 +08:00   ❤️ 6
高质量帖,一条条看完了,边看边整理了下觉得有用的 QA,供不喜欢爬楼的参考,感谢秦老师。
---
Q:怎么做到增加机器能线性增加性能的?
A:线性扩容有两种情况,一种是“无状态”服务,比如常见的 web 后端;另一种是“有状态服务”,比如 mysql 这种数据库。

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

对于有状态服务,除了要解决服务发现问题之外,还要解决状态(数据)迁移问题,迁移又分两步:先是数据拆分,常见的都是用哈希或者一致性哈希把数据打散。然后是迁移,常见的办法有快照和日志两类迁移方式。也有一些数据库直接实现了开发无感知的状态迁移功能,比如 hbase。

---

Q:代码优化,从哪些方向入手
A:代码优化分为几个层次。

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

再往后就是各自的境界了,我至今也还没参透……

---

Q:做「你关注的某某人评论了某某人」之类的和几度人际关系相关的复杂功能的时候有没有遇到哪些性能上可能的问题
A:这肯定是有性能挑战的,比如“你关注的人也在关注”、“你关注的人最近发的微博”等等,都可以理解是二度关系。主要挑战点是数据的扇出量会比较大,我关注了 1000 人,这 1000 人又每人关注了 1000 人,那就是要 100 万的数据做处理。解决办法要么是减少扇出(比如限制关注人数量),要么是离线算数据,在线取结果。

---

Q:视频存储和提供有什么难点嘛,常年 mysql 中 varchar 选手想了解下
A:视频存储和播放难点要分开说。

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

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

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

---

Q:分布式事务这块是怎么处理的呢?是由业务系统去做一致,幂等之类的保证吗?还是有统一的中间件或框架呢?
A:微博这边的一致性要求并不高,一般是通过幂等性和常规的乐观、悲观锁实现的,分布式事务(至少在我这里)用的不多。

---

Q:在系统或功能模块设计阶段是如何考虑系统的扩展性的呢?是快速原型,实现,上线,后续迭代升级,还是说会在一开始就做一些复杂的设计?在这方面是怎么作取舍呢?
A:设计阶段要考虑的首先是“系统哪些功能是必不可少并且需要快速验证的”,然后是“系统 2 年以内有可能会有什么变化”,觉着不好设计的原因还是设计少了,踩的坑不够多。经验多了,就没这类问题了。

---

Q:视频类的后端开发和其他图文为主的社区产品后端开发,架构、技术选型上有哪些不一样的地方
A:从整体的角度来抽象看,要做的东西其实差不多,都会有增删改查,然后内容理解+推荐;视频特殊一些的地方是有视频编解码。
具体技术选型来说的话,业务上的增删改查都差不多,但是视频存储都是对象存储服务而非关系型数据库;视频方向的内容理解更多的偏向深度学习的实现;视频编解码是一门独立的专业,不过由于太耗计算资源所以还要配合着调度系统一起实现。

---

Q:怎么做才能做到不同地区,用户播放视频都比较流畅?会用到类似 CDN 的部署架构?
A:如果往深了说,流畅是几方面的综合结果,包括视频体积、CDN 部署、播放调度、防劫持、播放调度、防劫持等等。

对于你说的不同地区来说,最重要的方面有两个:一个是 CDN 部署和调度情况,尽量让用户访问边缘节点;然后是防止劫持,一般流量被劫持后都不可避免的性能变差……

---

Q:应用服务器的数据库连接池应该设多大?看了一篇译文 jianshu.com/p/a8f653fc0c54 的观点是"连接数 = ((核心数 * 2) + 有效磁盘数)", 不知道实际一般是不是这样计算
A:我没太看懂你的问题,到底是数据库服务的连接池,还是应用服务连接数据库的连接池?文章里我简单扫了一眼,似乎是后者

不过无论哪个连接池,核心问题还是“同一时间内,需要同时请求的数量”,这个其实就是个数学公式,类似“这条路上每天要跑 1000 辆车,每辆车跑个来回要 10 分钟,那么路建多宽合适”。按我的经验,连接数多设一点不会有太多问题(除非设的数量太夸张把系统连接数耗尽了),而设少了,在系统负载变高的时候就会出现非常明显的排队现象,这对服务性能的影响更大一些。
WhoMercy
    142
WhoMercy  
   2019-10-28 12:02:42 +08:00   ❤️ 1
---

Q:有使用 K8S 应用的案例吗,比如说用在数据库扩容上面
A:我的团队应用 k8s 更多的是在线下或者半离线业务场景下,做后台系统或者一些非实时任务。用来降低整体计算成本。至于线上业务,k8s 的能力还不足以让微博这种体量的公司开箱即用,这个改造成本也会比较高。

---

Q:老板好,正文描述的几个系统主要是用什么技术栈构建的呢?能谈谈当时技术选型的取舍吗?
A:语言 Java 用的多,好招人;框架分场景,比如做消息推送服务就用了 netty。取舍:尽量好招人的技术栈。

---

Q:处理高并发有哪些难点?以前感觉这块挺神秘的,接触不到
A:能用缓存就用缓存
考虑并发场景下的一致性
在框架里做好断路器和保护机制
做压测和容量预估
加机器-.-

要做高并发,还是要有场景。这玩意就是个难者不会,会者不难的东西……

---

Q:大佬你现在自身的技术栈是怎么样的。3 年后端参考下。
A:我是属于那种“什么都会一点”的技术专家,如果单独说技术栈的话就太多了,列不下来。

换个回答方向,说一下我认为自己的技术强项吧。

一个是系统设计能力,能够设计微博这种用户和流量规模的后端服务。
一个是对操作系统、网络和 VM 的理解,能够排查复杂性能问题。
一个是业务方面的能力,包括通讯直播视频和社交媒体相关业务和对应技术(消息推送、视频编码、文件存储,等等)

总结下来的话,就是基础知识+架构经验+领域知识吧。

---

Q:微博有 golang 这块应用吗?
A:微博的部门很多,每个部门情况不一样。在我这边有一部分 golang 的线上应用,也有一部分管理系统用的是 golang。
axb
    143
axb  
OP
   2019-10-28 12:03:23 +08:00
@smallyu 请问您如何看待之前的微服务和目前提倡的无服务,以及目前火热的中台的概念?这些概念的价值如何,背后是技术的演进,还是营销的泡沫?了解学习相关的东西,可以构建起自己的技术壁垒吗?

概念肯定是多了解一些更好,一个概念代表了对一类问题和解决方案的高层次的抽象。但是光靠概念这东西怎么可能构建出技术壁垒……
WhoMercy
    144
WhoMercy  
   2019-10-28 12:03:48 +08:00
---

Q:很多公司要求的大数据高并发经验,在小公司工作的机会永远用不到的如果才能通过这种 offer
A:分两方面说,很多地方招聘(包括我这边)虽然更倾向于有高并发经验的人,但是这也不是个绝对的必选项。我的判断条件是“是否达到了所在平台的天花板”和“是否有持续进步的潜力”,大部分情况下,能把当前工作搞的很好的人,也能把高并发搞的很好。

另一方面,我一直认为能去大厂还是尽可能的去大厂,毕竟大厂能带来的经验和提升很多小公司确实没有。通过自学能储备一些知识,网上的教程也有不少,不过经验的差距很难解决。

简单来说,把自己想象成应届生,工作几年没有高并发经验和应届生没有工作经验面临的状况是类似的。

---

Q:一个合格的 5 年后端要具备哪些能力?
A:这问题有些宽泛,一线互联网公司的五年跟不知名公司的五年,完全不是一个概念。

我只说一线互联网公司的五年,基本上应该是小组长,能够独立设计日活百万级别的后端系统架构,在开发规范和效率方面能够指导初级工程师和工作。此外还有复杂问题的分析和解决能力。

---

Q:请问 估算一个对象的大小,这问题意义在哪?
A:没看懂你的问题,是说 jvm 里的大小还是序列化后的大小?前者一般是面试的时候考查对 vm 的理解,后者是缓存容量评估。

---

Q:你们团队有测试开发吗?如果有,请问他们都做些什么工作?他们的技术栈大概是怎么样的?
A:测试是另一个团队,他们做的事情是写测试框架、搭测试系统、写测试用例。
技术栈跟普通开发差不多。
WhoMercy
    145
WhoMercy  
   2019-10-28 12:04:00 +08:00
---

Q:以前一直用 c++ 做游戏, 现在想转互联网后端, 做 Go 或 Java, 但是投了简历一直也没消息, 互联网的那些技术栈也比较难实践, 有啥好的方法么...
A:先用 go 或者 java 做点实际的东西出来,比如我之前团队有个小伙之前也是用 C++,投我这边 Go 的职位。他业余时间用 Go 做了个 V2EX 的客户端,当场就要了。

---

Q:如果想重试大数据开发的话,平时应该多关注哪些技术栈呢,从服务端开发转过去有哪些地方需要了解提升的
A:大数据开发这个职位挺缥缈的……我不清楚你说的大数据开发是指的数据分析、数据中间件、有大数据场景的后端应用还是什么别的。

第一个,一般就是流式处理框架,Hadoop 全家桶之类的数据处理框架。
第二三个,跟普通后端开发没啥本质区别。

---

Q:.用户的关注列表分页拉取时,如何把正在直播的主播前置到列表
A:假设正在直播的主播不多,可以单独存正在直播的主播,插到关注列表前面。

---

Q:主播的粉丝量很大时,开播如何及时推送给粉丝
A:1 想办法并行取粉丝关系,并行推送 2 优先推送核心用户 3 改成拉取模式,实时获取当前主播的直播状态

---
end→#128
axb
    146
axb  
OP
   2019-10-28 12:05:36 +08:00
@vjnjc 请问一下,假设一个集群里 a,b,c 三个服务(或者叫应用)都依赖于 d ( v1.0 )这个服务,现在需要把 d 这个服务,从 1.0 升级到 2.0。

目前我的操作流程是额外开一台机器用于跑 d ( v1.0 ),然后把 d 的所有机器都升级到 2.0,然后把 a,b,c 三个服务都升级到依赖于 d ( v2.0 ),再把 d ( v1.0 )这台机器关闭。

感觉这么做很麻烦,而且也不自动。因为 a,b,c 都依赖于 1.0 版本,所以在整个升级过程,d 服务的两个版本,1.0 和 2.0 都是存在着的。请问能介绍一下你们的经验吗?我这里用的是 dubbo,每个服务各有两台机器运行着。


这是个通用问题,解决办法是保持接口向前兼容。可以理解是先上 D1.5 版,升级完 ABC,再升级到 D2.0
axb
    147
axb  
OP
   2019-10-28 12:07:28 +08:00
@opengps 专门请教下:后端扩容有什么好的方案和建议呢?
1,数据库变大,需要动态增加机器,怎样一种方案可以无感知增加?
要么是提前做逻辑分表,容量瓶颈之后把逻辑表做物理迁移。或者干脆用 hbase 这种天然扩容无感知的数据库。

2,数据量变大,查询效率如何维持?
提前做容量预估

3,老数据的删除,我们项目上有,不知道大佬的项目中怎么处理?
对 mysql 来说就是按月分表,定期删除过期表。对 hbase 之类的设个 ttl
axb
    148
axb  
OP
   2019-10-28 12:08:26 +08:00
@fishioon 同步再建个 github 仓库回答这些问题?翻评论比较累。。。

我就突发奇想开了个贴,不是个长期的事情,没必要开 github。有兴趣的就爬楼吧……
axb
    149
axb  
OP
   2019-10-28 12:10:29 +08:00
@awanganddong 大佬,在小公司里边想要进阶,有什么比较平滑且接地气的方法,适用于普通人的。

尝试着站在领导的角度思考同一个问题,然后跟领导实际问你的问题做比较,逐渐建立起自己解决更高层问题的思考方式。
axb
    150
axb  
OP
   2019-10-28 12:11:47 +08:00
@Hsingx 请教一下微博的 timeline 是怎么设计的?我在浏览当前 timeline 过程中关注了用户 A, 继续加载发现用户 A 的微博已经出现当前 timeline 中了。

关于这个话题请以微博之前的公开分享资料为准,网上搜搜应该会有。
xieyang313
    151
xieyang313  
   2019-10-28 12:23:28 +08:00
我就是想看看有没有叫泰迪老师的😂
dosmlp
    152
dosmlp  
   2019-10-28 12:26:20 +08:00
请问你是蛋疼的 axb 吗
axb
    153
axb  
OP
   2019-10-28 12:27:56 +08:00
@dosmlp 请问你是蛋疼的 axb 吗

bzj
    154
bzj  
   2019-10-28 12:34:45 +08:00
微博是怎么做到用户不主动操作的情况下自动关注营销号或者转发营销内容的,请问用了什么算法?
axb
    155
axb  
OP
   2019-10-28 12:46:48 +08:00 via iPhone
@bzj 在这种帖子里发泄情绪并不会有什么实际的收获。我也不想浪费时间跟你解释。
aragakiyuii
    156
aragakiyuii  
   2019-10-28 12:48:04 +08:00 via Android
请问 axb 老师,您对于某些关于查询不允许 join 的规定是怎么看待的,微博现在也是这样的嘛?

很多人都说在代码中处理,对于一些查询数据量较大,类似报表,统计相关场景,在代码中处理是不是不太合适?或者说还是采取分页查询进行处理?
axb
    157
axb  
OP
   2019-10-28 13:07:34 +08:00
@aragakiyuii 老师,您对于某些关于查询不允许 join 的规定是怎么看待的,微博现在也是这样的嘛?很多人都说在代码中处理,对于一些查询数据量较大,类似报表,统计相关场景,在代码中处理是不是不太合适?或者说还是采取分页查询进行处理?

我们处理用户请求的服务是没有 join 的,对性能的影响太大。线下做报表当然需要 join……
meteor957
    158
meteor957  
   2019-10-28 13:24:02 +08:00
类似 weibo 点赞相关的数据库表应该怎么设计,还有类似关注粉丝的表结构,好奇
taogen
    159
taogen  
   2019-10-28 13:37:30 +08:00 via Android
请问老师,普通本科毕业,在小公司工作 2 年,想进大公司。在这个前提下,我应该向哪些方面努力提高自己的竞争力?哪些亮眼的经历或成就可以得到您的面试机会?
QUIOA
    160
QUIOA  
   2019-10-28 13:40:19 +08:00 via Android
@mikulch 我想恁说的就是 axb
Infernalzero
    161
Infernalzero  
   2019-10-28 13:53:10 +08:00
@meteor957 虽然我不是微博的,但是这块数据量大后肯定是用 Redis 集群来做,Redis 的好几种数据结构都很适合这种业务场景,而且对一致性要求不高
Mirana
    162
Mirana  
   2019-10-28 14:06:46 +08:00
@axb 程序员怎么找女朋友
robinlovemaggie
    163
robinlovemaggie  
   2019-10-28 14:14:37 +08:00
假设一个场景:存在那么一个超级账号拥有最高级别权限(比如来去之间的),如何保证此账号不被盗用?
micean
    164
micean  
   2019-10-28 14:23:42 +08:00
@axb
呃……我的意思是由在 java 和 scala 有一些第三方的支持 mysql 和 pg 的异步驱动,有应用过这一块吗?
yingo
    165
yingo  
   2019-10-28 14:42:59 +08:00
大佬能不能提一个 paxos 或者 raft 的使用场景.
zhangalong69
    166
zhangalong69  
   2019-10-28 14:43:23 +08:00
@axb 微博存在中台部门吗,各个组之间 RPC 调用是 dubbo 吗
yingo
    167
yingo  
   2019-10-28 14:45:29 +08:00
再来一个,分布式数据库是如何进行数据同步的,对高并发大数据来说,除了主从复制还有其他方法吗?另一个问法就是有哪些可以参考的技术等等.谢谢大佬.
monster0522
    168
monster0522  
   2019-10-28 14:47:39 +08:00
大佬你好,请教一个问题。 有两个百万条数据的表以及三张万以内数据表,取数据的时候不可避免要 join。 客户端可以自由调整日期,来查看数据。 因为表数据十分钟同步更新一次以及用户自由调整日期,感觉没办法做缓存。还有因为历史问题不能重建表结构。
现在每次查询都要 join 一次,导致查询数据很慢,要 10s 多,请问一下要怎么优化。
wucao219101
    169
wucao219101  
   2019-10-28 15:26:42 +08:00
直播聊天室、弹幕、送礼物消息和特效展示这类消息群发,用到后端的技术栈是什么样的?
zhouwei520
    170
zhouwei520  
   2019-10-28 15:31:44 +08:00
收藏下,学习一下技术
codespots
    171
codespots  
   2019-10-28 15:33:50 +08:00
@axb 大佬,对于不同质量的图片视频文件,是如何确定存储时的压缩率的?有什么通用的规则吗?
whitehack
    172
whitehack  
   2019-10-28 15:37:47 +08:00
@axb 请问下大佬平时有啥休闲活动? 比如 追剧 玩游戏啥的
karnaugh
    173
karnaugh  
   2019-10-28 15:41:57 +08:00
问一个职业规划问题,您对一个一年半后要回到海南海口的前端程序员有什么规划方向建议吗?
BenOx
    174
BenOx  
   2019-10-28 16:24:32 +08:00
在校研究生,一年的时间怎么准备明年后端岗位的校招
abccccabc
    175
abccccabc  
   2019-10-28 16:50:57 +08:00
不知道楼主有没有兴趣将自已的技术光辉点(代码)留在我的小站上呢。
Cihua
    176
Cihua  
   2019-10-28 16:53:47 +08:00
@axb 大佬,4 年 java,一直在做后台管理或 APP(50 万日活)后端开发,由于项目重构使用 springcloud,我被划分成几个业务服务的组长,每天都是业务需求.感觉没啥提升,暂时有点迷茫(感觉到了某个瓶颈),不知道后面什么发展方向,无论自己搞点什么新东西,时间长不用就又忘记了..有好的让自己提升的方式么
blackccc
    177
blackccc  
   2019-10-28 16:54:41 +08:00
干货技术贴,谢谢大佬
ebony0319
    178
ebony0319  
   2019-10-28 17:12:56 +08:00
@Yoock 老哥,你的 README.md 过于简单,可以简单补充说一下思路么。
mineqiqi
    179
mineqiqi  
   2019-10-28 17:14:14 +08:00
大佬好,我想问下像微博这种体量的公司服务动态扩容的解决方案是什么,业界内是否有其他的解决方案?给个大致方向即可,非常感谢
wlkq
    180
wlkq  
   2019-10-28 17:31:49 +08:00
公司后面会做大数据分析智能推送的东西,有什么推荐入门的书吗?
lawlielt
    181
lawlielt  
   2019-10-28 18:08:35 +08:00
@ssdde
微博 app 内--发现--节目 支持节目集搜索
小程序 -- 很酷的视频 -- 支持视频和节目集搜索
ssdde
    182
ssdde  
   2019-10-28 18:19:47 +08:00
@lawlielt,PC 网页端浏览器内,没法搜索
charlie21
    183
charlie21  
   2019-10-28 18:29:30 +08:00
请问软件开发工程师和软件测试工程师是分开的吗?测试工程师的头头 ( 能带团队的 ) 的天花板大概多高,能高过普通开发吗
frontendfan
    184
frontendfan  
   2019-10-28 18:37:49 +08:00
hiboshi
    185
hiboshi  
   2019-10-28 18:52:56 +08:00
请问秦大佬有什么架构师交流群吗?
aptx4689
    186
aptx4689  
   2019-10-28 19:21:25 +08:00 via iPhone
想问一下微博的 at 有针对性优化吗?比如我 at 一个朋友的号(几百粉丝的那种)和 at 一个大 V 的号(比如 @带带大师兄),他们 at 的提醒是同时收到的吗?
如果不是,可以在不透露具体机密的情况下谈谈这种系统应该如何设计吗?
solaya
    187
solaya  
   2019-10-28 19:21:39 +08:00
秦老师好
caskeep
    188
caskeep  
   2019-10-28 19:27:32 +08:00
@axb 最近在研究 cloud-native, k8s and devOps ci/cd,感谢回复。
axb
    189
axb  
OP
   2019-10-28 19:31:22 +08:00
@meteor957 类似 weibo 点赞相关的数据库表应该怎么设计,还有类似关注粉丝的表结构,好奇

我也没法把微博数据库的建表语句搬过来,我也没有明白你的场景和问题是什么,没法给你思路。
axb
    190
axb  
OP
   2019-10-28 19:32:54 +08:00
@taogen 请问老师,普通本科毕业,在小公司工作 2 年,想进大公司。在这个前提下,我应该向哪些方面努力提高自己的竞争力?哪些亮眼的经历或成就可以得到您的面试机会?

学校水平,工作经验,开源项目。基本就这三方面。
axb
    191
axb  
OP
   2019-10-28 19:33:31 +08:00
@robinlovemaggie 假设一个场景:存在那么一个超级账号拥有最高级别权限(比如来去之间的),如何保证此账号不被盗用?

我不是负责安全的,不清楚。
axb
    192
axb  
OP
   2019-10-28 19:34:38 +08:00
@micean 呃……我的意思是由在 java 和 scala 有一些第三方的支持 mysql 和 pg 的异步驱动,有应用过这一块吗?

要做到请求全链路的异步 IO 改造量太大了,我们只是调研过,目前在观望。
axb
    193
axb  
OP
   2019-10-28 19:38:02 +08:00
@yingo 大佬能不能提一个 paxos 或者 raft 的使用场景.

你是指业务中使用还是组件里使用?业务上没有用,组件 zookeeper、consul 之类的微博里都有应用场景。
axb
    194
axb  
OP
   2019-10-28 19:39:12 +08:00
@zhangalong69 @axb 微博存在中台部门吗,各个组之间 RPC 调用是 dubbo 吗

我负责的部门就叫视频中台,RPC 调用是微博自研的 motan https://github.com/weibocom/motan
mikuazusa
    195
mikuazusa  
   2019-10-28 19:43:13 +08:00
好奇问问微博的技术级别和阿里是打平的吗?资深技术专家相当于 P9 了
axb
    196
axb  
OP
   2019-10-28 20:01:57 +08:00
@yingo 再来一个,分布式数据库是如何进行数据同步的,对高并发大数据来说,除了主从复制还有其他方法吗?另一个问法就是有哪些可以参考的技术等等.谢谢大佬.

要么类似 mysql 的异步主从,要么类似 hbase 冗余写多份。写多份的方案从简单的客户端多写,到通过共识算法达成一致都有,建议搜索引擎里直接列上几个数据库名字,比如 mysql hbase tidb,应该就能搜出一堆资料。
axb
    197
axb  
OP
   2019-10-28 20:11:05 +08:00
@monster0522 大佬你好,请教一个问题。 有两个百万条数据的表以及三张万以内数据表,取数据的时候不可避免要 join。 客户端可以自由调整日期,来查看数据。 因为表数据十分钟同步更新一次以及用户自由调整日期,感觉没办法做缓存。还有因为历史问题不能重建表结构。
现在每次查询都要 join 一次,导致查询数据很慢,要 10s 多,请问一下要怎么优化。

“有两个百万条数据的表以及三张万以内数据表,取数据的时候不可避免要 join”,如果能改表结构的话,把索引和内容分开存,其实百万级的数据全放内存里都没多少容量。如果非要 join,要么降低 join 的数据规模,要么提前算好数据,要么把能缓存的数据(比如那 3 张表)缓存起来,尽量降低查询时的磁盘消耗。
axb
    198
axb  
OP
   2019-10-28 20:11:49 +08:00
@wucao219101 直播聊天室、弹幕、送礼物消息和特效展示这类消息群发,用到后端的技术栈是什么样的?

最核心的是实现网络层推送的框架,比如 netty,其他跟普通后端开发没啥区别。
axb
    199
axb  
OP
   2019-10-28 20:13:22 +08:00
@codespots 对于不同质量的图片视频文件,是如何确定存储时的压缩率的?有什么通用的规则吗?

图片我不负责。视频压缩率是个单独课题,我这里无法展开讲,只能说大致就是依据画质损失程度确定压缩率。
axb
    200
axb  
OP
   2019-10-28 20:14:06 +08:00
@whitehack 请问下大佬平时有啥休闲活动? 比如 追剧 玩游戏啥的

追番,追剧,守望先锋。
1  2  3  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2590 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 01:41 · PVG 09:41 · LAX 18:41 · JFK 21:41
Developed with CodeLauncher
♥ Do have faith in what you're doing.