对于这个问题,我想回答是:行行出状元。程序员完全没有必要去纠结这个问题。 再说了,后端的范围其实很广泛的,包括后端开发语言、运维、安全、数据库、网络模型、大数据、算法和数据结构、搜索引擎、机器学习等等,人工智能只是它的一部分。我觉得我们应该更多关注的是自己的兴趣所在,你感兴趣那个就学习那个。 作为一名后端程序员,为什么要迷茫?原因何在,工资不高?前景不好?还是其他原因?其实完全没必要,任何一个行业,学精了,待遇相差不大的。 作为一个后端程序员,你是否掌握了你的学习路线,下面的技术你是否都掌握了
如果要学好后端 ,要拿高工资,要有更好的发展前景,后台开发服务必须学会解决三高问题:高并发、高可用、高性能 一 高并发 我们的开发的后台服务器应付一些小并发场景绰绰有余,但是随着互联网应用业务量的上涨,对后台服务端的请求数剧增,高并发需求随之而来,高并发指的就是高 TPS 和高 QPS TPS (Transactions Per Second)每秒事务数 QPS(Query Per Second)每秒查询数等。 对于高并发服务必须改变传统的单进程模型,才能处理的过来如此海量的请求。处理高并发,我们要学习下面技术来处理这个问题 多进程 对于高并发的服务请求,由于后台服务一般都是 IO 密集型应用,IO 密集型应用就是大部分 CPU 时间用在网络 IO 上,相对的是 CPU 密集型应用大部分时间花在数据计算上。 大多数的后台服务程序都是 IO 密集型的应用,网络 IO 的时候 CPU 等待白白浪费时间, 这就告诉我们 CPU 的潜力还没有完全发挥,所以当一个进程的处理能力达到上限,我们可以多创建几个进程,这就是多进程模型。 多线程 多线程与多进程类似,实际在Linux系统中线程是由轻量级的进程 LWP(Light-weight process)实现,多线程方式实现的后台服务相对于多进程更加轻量,因为多线程是在同一个进程内部实现。 不过多线程也会带来新的问题,比如全局数据竞争和同步问题,引入线程锁还要防止死锁的发生。 协程 那什么是协程呢?协程 Coroutines 是一种比线程更加轻量级的微线程。类比一个进程可以拥有多个线程,一个线程也可以拥有多个协程,因此协程又称微线程和纤程。可以粗略的把协程理解成子程序调用,每个子程序都可以在一个单独的协程内执行。 异步回调 所谓异步回调就是,服务端发起 IO 请求的线程不等网络 IO 线程操作完成,就继续执行随后的代码,一般请求线程需要先注册一个回调函数,当IO 完成之后网络IO线程通过调用之前注册的回调函数来通知发起 IO 请求的线程,这样发起请求的线程就不会阻塞住等待结果,提高了服务处理性能 二 高性能 按以上服务模型可以提高服务本身处理能力,高性能后台服务往往还会利用多种技术、从多个维度优化提高性能。比如采用CDN(Content Delivery Network)内容分发网络,存储和分发使用户就近获取内容,缩短响应时间;采用池化技术,避免频繁的资源分配与回收;采用服务集群,横向扩展服务能力;采用缓存技术,热点数据加入缓存,减少数据库访问。 1.CND 内容分发技术 2.池化技术:数据库连接池,线程池 3.集群化 4.技术 三 高可用 高可用即保证服务的稳定性,不出现重大问题或宕机,常见的解决高可用思路是冗余和负载均衡。冗余的意思就是多部署几台服务器,当其中一台挂掉另外一台能顶上。通过负载均衡技术实现对流量的动态调配,不至于出现大量流量冲击某台机器出现请求不均匀,软件负载均衡技术可以通过DNS、Nginx、LVS等技术实现。这里主要学习的技术有: 1.负载均衡技术,软硬件负载均衡 2.限流隔离降级技术 3.应用层容灾,资源隔离熔断 4.异地多活 三高问题是后端开发的主流问题,也是作为后端开发高级工程师必须掌握的问题,要能灵活运用这些技术解决企业级项目问题,我们路还很长,与其在迷惘,不如抓紧时间学习后端开发技术,提高我们技术水平,才是后端程序员最需要做的事情。
|