Java全栈看似内容庞杂,只要掌握方法成功离我们很近,话不多说,上硬货!

Web后端架构

后端进阶第一步,先把Web架构相关的技术学好吧,因为之前大家都做过Java Web项目,想必对这块内容还是比较熟悉的吧。我们需要了解Web架构演化的历史,了解为什么要做服务器集群,为什么要用缓存,为什么要做拆分,做主从,以及为什么要有分布式。

分布式理论基础

由于下面的内容或多或少都会涉及到分布式相关的知识,所以这一部分我们主要介绍一下有关分布式的基础知识。笔者对分布式的学习主要也停留在理论上,所以这里讲的也是一些理论的东西。

1、CAP 和 BASE

谈分布式就要谈CAP,一致性,高可用,网络分区容忍性为何只能三选二,为什么网络分区容忍性必须要被考虑。CAP在实际应用中真的可靠么?

BASE出现的原因,为什么BASE更容易实现,更适合实际应用,BASE可以通过哪些技术去实现呢?

2、一致性协议和算法

一致性协议也是分布式理论的一个重点,2PC,3PC,分别指的是什么,其中分别有什么问题。3PC解决了2PC的一个问题,却仍然不完美。

Paxos和Raft两种一致性算法,显然前者比后者复杂得多,但是Raft可能更加实用。为什么我们需要一致性算法,它们又有什么用呢。

3、分布式事务和最终一致性

分布式事务是一个复杂的概念,主要指分布式系统中需要强一致场景时所用到的事务。理解和实现它都不是简单的事情。

如果我们退而求其次,不要求强一致性,而选择最终一致性,则可以用更加灵活的方案,比如事务消息。

常见分布式技术

1、zookeeper

上文说到zookeeper是分布式技术很重要的一块内容,这是因为zookeeper用于管理和协调分布式组件,虽然它出自hadoop生态,却用于很多应用当中,基本上有分布式的地方就有zk的存在。

简单说来,zk可以提供全局统一的节点树结构,通过节点来管理资源,同时zk自身是使用集群方式部署的,所以保证自己是高可用的。根据这一特点,它可以作为服务注册中心,还可以实现分布式锁等功能。

2、分布式服务

分布式服务是一个挺有意思的东西,也很常用,简单来说,就是把服务组件部署在不同节点上,通过rpc的方式访问,为了实现这一功能,我们需要考虑通信协议,序列化方式,进一步来说,我们还要了解如何做服务注册和发现,以及如何做限流,做服务熔断和降级,等等等等。

常见的分布式服务框架有dubbo,以及Spring Cloud这类产品,学会使用他们,然后了解它们的底层实现原理,相信会是一个很有趣的过程。

3、负载均衡

关于负载均衡,说起来其实很简单,就是把一组请求分成多组,按照某种规则分发到多台服务器上。

但是负载均衡也涉及很多内容,包括负载均衡的算法,负载均衡的实现方式,我们需要了解它到底是在哪一层实现的。

一般来说,常用的负载均衡方式有nginx和lvs两种,分别是7层和4层的负载均衡,一个基于域名进行负载均衡,一个基于端口号做负载均衡。了解它们的实现原理,会让你更好地理解这部分内容。

4、分布式session和分布式锁

这两个组件也是分布式项目中经常要用到的,了解它们的使用和实现原理,有助于以后在项目中的实践。

分布式session一般有多种实现方式,可以存数据库或者缓存,也可以单独部署成一个服务,总之最重要的一点就是,性能要好,并且要高可用。

分布式锁则用于一些需要一致性的场景中,比如订单生成这种全局唯一的功能,分布式锁通常可以用缓存或者数据库来实现,但为了保证高性能,并且避免死锁,我们一般采用Redis或者zookeeper来实现。

缓存

讲到缓存,我们说的最多的就是Redis,所以我们要讲的也是Redis。学习Redis,除了学会使用简单的api之外,最好还要了解它的实现原理。

这里我们主要介绍三部分内容,也是我个人认为比较重要的三块内容。

1、数据结构和底层实现

Redis的数据结构比较丰富,但更有意思的是这些数据结构背后的底层实现,也就是作者如何用c语言来实现这些结构的。其中会有你熟悉的数组,链表,还有一些有意思的结构比如跳表,哈希表。

2、持久化方式

持久化方式主要分两种,aof和rdb,前者基于追加日志的方式来实现日志持久化,后者则是使用备份数据的方式来实现持久化。

3、分布式方案

这是Redis最有趣也最复杂的部分。 首先,Redis可以使用主从的方式部署,其中“哨兵”这一组件用于故障切换。

基于哨兵的主从部署后来发展为Redis cluster的部署方式,也就是Redis集群,通过分片的方式来部署Redis集群,并且集群中任一节点都可以用来对外提供服务。

当然,除了Redis集群之外,还有codis的分布式方案,codis基于代理的方式来实现,表面上还是使用原来的Redis API,但实际上访问的却是一个Redis集群。

消息队列

消息队列的作用一般来说就是削峰,控流,解耦合,目前业界也有很多的消息队列产品,在很多公司都会使用,当然,它们各有各的优缺点,我们也不必全都了解,这里我们大概介绍3种消息队列,它们各自的特点都比较鲜明,值得大家去了解一番。

1、RabbitMQ

笔者刚开始接触的消息队列是rabbitmq,它的使用方法比较简单。 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,主要有以下特点:

  1. 安装部署简单,上手门槛低,功能丰富,符合AMQP标准;

  2. 企业级消息队列,经过大量实践考验的高可靠;

  3. 集群易扩展,可以轻松的增减集群节点;

  4. 有强大的WEB管理页面。

2、Kafka

与其他MQ相比较,Kafka有一些优缺点,主要如下

优点:

  1. 可扩展。Kafka集群可以透明的扩展,增加新的服务器进集群。

  2. 高性能。Kafka性能远超过传统的ActiveMQ、RabbitMQ等,Kafka支持Batch操作。

  3. 容错性。Kafka每个Partition数据会复制到几台服务器,当某个Broker失效时,Zookeeper将通知生产者和消费者从而使用其他的Broker。

缺点:

  1. 重复消息。Kafka保证每条消息至少送达一次,虽然几率很小,但一条消息可能被送达多次。

  2. 消息乱序。Kafka某一个固定的Partition内部的消息是保证有序的,如果一个Topic有多个Partition,partition之间的消息送达不保证有序。

  3. 复杂性。Kafka需要Zookeeper的支持,Topic一般需要人工创建,部署和维护比一般MQ成本更高。

3、RocketMQ

RocketMQ是一个纯java、分布式、队列模型的开源消息中间件,前身是Metaq,当 Metaq 3.0发布时,产品名称改为 RocketMQ。

具有以下特点:

  1. 能够保证严格的消息顺序

  2. 提供丰富的消息拉取模式

  3. 高效的订阅者水平扩展能力

  4. 实时的消息订阅机制

  5. 亿级消息堆积能力

除此之外,它还有一个优点,就是支持事务消息,让分布式事务的实现变得简单

分布式数据库

这里说的分布式”数据库“,其实指的是数据库的分布式方案,更具体来说,主要指的是数据库的主从部署,以及分库,分表。

1、主从复制和读写分离

这是数据库高可用的基础。MySQL数据库会使用日志来完成主从复制,先写主库,然后再同步到从库。读写分离则一般是指的是:从库负责读,主库负责写。

2、分库分表方案

分库分表是解决大表性能瓶颈的一种方法,当然也分为横向拆分和纵向拆分,横向拆分指的就是减少单表的数据量,放到其他表或者其他库中。纵向拆分则一般指按照业务来拆分,把不必要的字段放到其他表中。

分库分表可以在应用层做,通过对id或者其他字段进行hash以便映射到对应的表中。当然也可以通过数据库中间件来完成,例如mycat这种中间件,通过代理的方式实现分库分表,非常方便。

大后端相关技术

这部分的内容笔者也只是略知一二,所以这里只是抛砖引玉,做一个简单的科普罢了。毕竟咱们学技术的人都是先讲深度再来谈广度。当你对之前的内容掌握得比较好的时候,再去看看大后端的一些其他技术,也会感觉挺有意思的。

下面这些技术主要是我自己学习路上接触过的一些内容,所以比较熟悉,才拿出来分享,至于适不适合大家的口味,可能就见仁见智了。

1、Hadoop生态

笔者之前参与过数据仓库相关的项目,所以稍微了解了这方面的内容,感觉hadoop生态还是挺有意思的。

大家不妨去了解一下其中的基本组件,然后打一个集群自己玩玩看。 常见的组件有:hdfs,hbase,hive,zookeeper,flume,sqoop,yarn。

对于入门hadoop生态来说,这本书完全足够了,如果你要做大数据平台开发或者是数据研发工程师,可能需要非常全面地了解这些组件的底层原理。

2、云计算初探

笔者之前参与过私有云相关的项目,所以稍微了解了这方面的内容,感觉这方面的内容也蛮有趣的。

我在项目中主要接触到的是OpenStack,docker以及kubenetes,OpenStack是一个私有云生态,内部结构对于我们来说还是比较复杂的,不过最根本的虚拟化技术还是基于kvm虚拟化来实现的。

docker则是现在非常流行的一种容器,用于快速部署应用。

kubenetes也借着docker的东风火了起来,可以理解为是基于容器的分布式调度系统。

这些技术在企业中也是比较常用的,只不过对于研发同学来说,更多时候扮演的是工具的角色。

3、其他常见后端技术

除此之外,想必大家还了解过很多其他的技术,只不过不同的业务用到的组件往往不一样,所以并不是每个东西你都需要去了解。

比如搜索引擎技术Lucene,基于它的两款产品solr和elasticsearch,通常出现在需要搜索功能的项目中。

再比如流式计算技术,如storm和spark streaming等等,通常都用于大数据部门,用作实时数据采集。

又如ELK实现的分布式日志系统,多用于分析和定位系统问题,经常会出现在一些比较重要的应用当中。

当然,也有现在大火的人工智能,还有太多的技术我们没机会去了解和使用,我们能做的也就是在自己能力范围内把需要做的东西做到最好了。

所以,这些内容并不是每一样你都需要知道,但是如果有时间去了解一下的话,还是建议多了解一点的。

总结

详细教程可以下载https://pan.baidu.com/s/1s2bJQ7cuP_Ob7eSqk71K4w?pwd=wj6y

Java全栈工程师学习相关推荐

  1. 全栈工程师薪水_2020 Java 全栈工程师进阶路线图,不可错过

    技术更新日新月异,对于初入职场或者刚开始学习的同学来说,经常会困惑该往那个方向发展,这一点所有刚开始学习的人基本都有这个体会的. 刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺 ...

  2. 2019 Java 全栈工程师进阶路线图,一定要收藏

    技术更新日新月异,对于初入职场的同学来说,经常会困惑该往那个方向发展,这一点松哥是深有体会的. 我刚开始学习 Java 那会,最大的问题就是不知道该学什么,以及学习的顺序,我相信这也是很多初学者经常面 ...

  3. 全栈工程师学习路线(自用)

    原文:https://blog.csdn.net/u013258443/article/details/82109174 前端:HTML/HTML5.CSS/CSS3.Javascript.jQuer ...

  4. Github 标星13 万的全栈工程师学习路线,学完我变强了!

    点击上方蓝色"后端技术学堂"关注后加个"星标" 最新文章不错过 阅读本文大概需要 3 分钟 每一天都不平凡,珍惜当下.1639 年的今天,英国天文学家杰雷米亚· ...

  5. JAVA全栈工程师必学具备怎样的知识体系?

    Java是超高人气编程语言,拥有跨平台.面向对象.泛型编程等特性.在TIOBE编程语言排行榜中,连续夺得第一宝座,而且国内各大知名互联网公司,后端开发首选语言:非Java莫属. 今天是针对各类目有更详 ...

  6. java全栈工程师是什么,附相关架构及资料

    一.不少培训班候选人的简历中,缺乏足够的商业项目年限 不少同学会有这样得感受:投出去不少简历,但就没有面试机会,对培训班出身的朋友来说,可能这种情况更甚,原因是,这些简历没过筛选. 没过筛选的原因无非 ...

  7. 唤醒手腕Python全栈工程师学习笔记(持久存储篇)

    这个篇目是"持久存储篇",讲的就是Python操作数据库,这边介绍3种数据库,分别是MySQL.Redis.Mongodb 1. Python操作MySQL数据库 MySQL属于传 ...

  8. java全栈工程师技术学习路线规划(自用)

    前端:HTML/HTML5.CSS/CSS3.Javascript.jQuery.RequireJS.AngularJS.Vue 后端:Java.Struts2/Spring MVC.JPA/Myba ...

  9. 学习 Java全栈工程师6.0 初学者笔记4— 循环结构 2021-08-11

    目录 概要 内容 while循环结构 do-while循环结构 for循环结构 概要 while循环结构 do-while循环结构 for循环结构 适用场景 特别注意: 循环结构的语法.执行流程.适用 ...

最新文章

  1. NVIDIA安培架构
  2. 机器学习数学基础:数理统计与描述性统计
  3. Django项目准备和配置(MVT图解、创建项目和应用、更换解释器、安装应用、本地化、模板路径、项目中匹配urls、应用中匹配urls.py、准备视图、开启服务器、修改DATABAS配置信息)
  4. 这道「传说级」的数学题,为什么有 3 个正确答案?
  5. 虚拟机Linux下解决ping时出现 unknown host问题
  6. vue组件库(二):基于verdaccio工具npm私服搭建
  7. 信息系统项目管理师-配置管理知识点
  8. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)解决方法
  9. 架构之路之spring+springmvc+maven+mongodb的搭建(转载:http://blog.csdn.net/tomcat_2014/article/details/55100130)
  10. Java 核心编程技术干货
  11. SQL Server 中 JSON_MODIFY 的使用
  12. python中变量类型在程序中可以改变_详细解析Python当中的数据类型和变量
  13. 小议H.264技术发展趋势
  14. 【文章】鱼那么信任水, 水却煮了鱼!
  15. 第九篇 IO流技术(九)
  16. Makefile教程(这一篇足够从入门到放弃!!!)
  17. numpy数组随机抽取
  18. qq空间相册查看器_一刻相册相册怎么样?一刻相册和其他相册对比
  19. YBTOJ反素数洛谷P1463(数论)
  20. PCF8591详解(蓝桥杯单片机模块(IIC总线))

热门文章

  1. hadoop的两个推荐下载地址
  2. TableView的使用方法
  3. Nodejs如何连接Mysql
  4. dava靶场远程命令执行
  5. 5 UML views and the 9+4 UML Diagrams 关系
  6. 几种编码方式(RZ、NRZ、NRZI、曼彻斯特编码)
  7. mysql创建数据库error1044_Mysql创建数据库时提示Error 1044
  8. 华中科技大学计算机考研书籍,2020年华中科技大学计算机应用技术考研经验分享...
  9. 情感分析(Emotion Detector)
  10. ffmpeg压缩命令