从新手到熟练-到精通
新手0-3个月 入门基础,按照规范,会写业务功能的代码,简单的设计数据库
熟练 1-3年 熟悉使用框架还有工作经验,知道那里有坑,各种业务场景下需要的技术点的应用
精通3-10年
熟悉底层原理如比如:我们常用的map?底层数据结构是什么?jdk7与jdk8的区别?为什么说是非线程安全的?为什么源码中用位移什么,系统架构设计等?
根据业务选用需要的技术,不受技术的约束,写代码写画图,把思路理清晰
看看招聘要求? 有大容量、高性能、高并发、分布式系统的设计开发经验者优先
高并发、分布式、高性能三个点的知识和技术都有啥?
1.分布式,微服务 https://www.cnblogs.com/xybaby/p/7787034.html
- 负载均衡:
Nginx:高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工作在应用层
LVS: Linux virtual server,基于集群技术和Linux操作系统实现一个高性能、高可用的服务器;工作在网络层
- webserver:
Java:Tomcat,Apache,Jboss
Python:gunicorn、uwsgi、twisted、webpy、tornado
- service:
SOA、微服务、spring boot,django
- 容器:
docker,kubernetes
- cache:
memcache、redis等
- 协调中心:
zookeeper、etcd等
zookeeper使用了Paxos协议Paxos是强一致性,高可用的去中心化分布式。zookeeper的使用场景非常广泛,之后细讲。
- rpc框架:
grpc、dubbo、brpc
dubbo是阿里开源的Java语言开发的高性能RPC框架,在阿里系的诸多架构中,都使用了dubbo + spring boot
- 消息队列:
kafka、rabbitMQ、rocketMQ、QSP
消息队列的应用场景:异步处理、应用解耦、流量削锋和消息通讯
- 实时数据平台:
storm、akka
- 离线数据平台:
hadoop、spark
PS: apark、akka、kafka都是scala语言写的,看到这个语言还是很牛逼的
- dbproxy:
cobar也是阿里开源的,在阿里系中使用也非常广泛,是关系型数据库的sharding + replica 代理
- db:
mysql、oracle、MongoDB、HBase
- 搜索:
elasticsearch、solr
- 日志:
rsyslog、elk、flume
2.高性能 高并发 参考
https://www.cnblogs.com/kisswind/p/6476021.html
https://blog.51cto.com/13672983/2121605
web高并发的核心肯定是集群,前面有人回答了。这个不用怀疑!所有公司都是这么实现的。
那么,为了现在活着将来的集群,我们要做什么准备?大概说一些会用到,希望对你有所帮助。
1、动静分离,静态资源请求与动态请求分离,项目中需要访问的图片、声音、js/css等静态资源需要有独立的存放位置,便于将来实现静态请求分离时直接剥离出来,比如nginx可以直接配置图片文件直接访问目录,而不需要经过tomcat。这样tomcat就可以专注处理动态请求,操作数据库数据处理之类的。静态请求代理服务器性能比tomcat高很多。
2、引入缓存,数据库缓存、页面缓存,这东西好用不复杂,搞明白什么地方适用最重要。简单的例子是频繁读取,不修改的地方最适用。也是后续集群做数据共享的一个方式之一,集群环境下,经常会碰到数据共享问题。
3、如果将来数据量大,单一数据库成为瓶颈时,数据库的读写分离来了。数据库集群,读写分离,分表分区。mysql对读写分离这些还是有点支持的,没仔细用过。
4、如果项目发展壮大了,已经过亿用户了,ok系统拆分来了。用户管理系统、订单系统,或者体育新闻系统、娱乐新闻系统等。保证一个系统当掉时不影响另一个,同时分担单系统压力。每个系统之下是前面3条!!
如果这一切都还搞不定,那你公司一定比谷歌还牛B了,哈哈……可喜可贺!
技术跟随业务的发展而改变,再选型技术架构的时候,成熟的方案是比较多的。