网页java知识点

Java后端从入门到放弃

2021-08-30  本文已影响0人  Ping开源

1.JavaSE

1.1 Java帝国的诞生

1)C&C++
①1972年C诞生:
贴近硬件,运行极快,效率极高
操作系统,编译器,数据库,网络系统等
指针和内存管理
②1982年C++诞生:面向对象 兼容C 网络系统等
③建立了新的语言Java:语法有点像C、没有指针、没有内存管理、真正的可移植性、编写一次,到处运行、面向对象、类型安全、质量高的类库······
2)Java初生
1995年的网页简单而粗糙,缺乏互动性。
图形界面的程序(Applet)
Java 2 标准版(J2SE):去占领桌面
Java 2 移动版(J2ME):去占领手机
Java 2 企业版(J2EE):去占领服务器
2)Java发展
基于Java开发居多的平台系统
①构建工具:Ant,Maven,Jekins
②应用服务器:Tomcat,Jetty,Jboss,Websphere,weblogic
③Web开发:Struts,Spring,Hibernate,myBatis
④开发工具:Eclipse,Netbean,intellij idea,Jbuilder
······
2006:Hadoop(大数据领域) 2008:Android(手机端)

1.2 Java的特性和优势

简单性、面对对象(万物皆对象)、可移植性、高性能、分布式、动态性、多线程、安全性、健壮性

1.3 Java的三大版本

跨平台(Write Once、Run Anywhere)
JavaSE:标准版(桌面程序,控制台开发······)
JavaME:嵌入式开发(手机,小家电,······)
JavaEE:E企业家开发(web端,服务器开发······)

1.4 JDK、JRE、JVM

JDK:Java Development Kit
JRE:Java Runtime Environment
JVM:Java Virtual Machine

环境搭建、语法学习、流程控制、方法、数组、面向对象、异常、常用类、集合、IO流、多线程、网络编程、GUI、注解与反射、JUC并发、JVM,当学习完上述这些板块后,才是真正的掌握了JavaSE的部分。

2.前端基础

1.1 HTML(结构层)

超文本标记语言,缩写为HTML,标准通用标记语言下的一个应用。HTML是一种标记语言,是网页制作所必备的工具。

1.2 CSS(表现层)

CSS层叠样式表是一门标记语言,并不是编程语言,因此不可以自定义变量,不可以引用等。换句话说,就是不具备任何语法支持。
缺点
①语法不够强大,比如无法嵌套书写,导致模块化开发中需要书写很多重复的选择器。
②没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,难以维护。
为了解决上述缺点,前端开发人员使用一种称之为CSS预处理器的工具,提供CSS缺失的样式层复用机制、减少冗余代码,提高样式代码的可维护性。大大提高了前端在样式上的开发效率。

CSS预处理器

CSS预处理器定义了一种新的语言,其基本思想是,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,任何开发者就只要使用这种语言进行CSS的编码工作。转化成通俗易懂的话来说就是,用一种专门的编程语言,进行Web页面样式设计,再通过编译器转化为正常的CSS文件,以供项目使用。
常用的CSS预处理器

1.3 JavaScript(行为层)

JavaScript一门弱类型脚本语言,其源代码在发往客户端运行之前不需经过编译,而是将文本格式的字符代码发送给浏览器由浏览器解析运行。

JavaScript框架
JavaScript构建工具

3.MySQL

3.1为什么要学习数据库

①岗位需求
②现在的世界是大数据时代,得数据者得天下。
③被迫需求:存数据。
④数据库是所有软件体系中最核心得存在。相应岗位:DBA数据库管理员。

3.2 什么是数据库

数据库(DB,DateBase)
概念:数据仓库,是个软件,安装在操作系统(linux,windows,mac···)之上。用SQL语句执行,可以储存大量的数据。500万条以下的数据可以直接存储,500万条以上需要进行索引的优化。
作用:存储数据、管理数据。

3.3 数据库分类

1)关系型数据库:SQL
主要有MySQL、Oracle、Sql Server、DB2、SQLlite
通过表和表之间,行和列之间的关系进行数据存储。
2)非关系型数据库:NoSQL(Not Only)
主要有:Redis,MongoDB
以对象存储,通过对象的自身属性来决定。
3)DBMS(数据库管理系统)
数据库的管理软件,科学有效的管理数据,维护和获取数据。

数据库、数据库管理系统和应用之间的关系

MySQL,数据库管理系统!

3.4 MySQL简介

MySQL是一个关系型数据库管理系统。
前身:属于瑞典的MySQL AB公司,如今:属于Oracle旗下产品。
MySQL是最好的RDBMS(Relational Database Management System,关系型数据库管理系统)应用软件之一。
是开源的数据库软件,具有体积小,速度快,总体拥有成本低的特点。
适用于中小型或大型网站,可以做集群。
官网:https://www.mysql.com 版本:5.7(稳定)、8.0
官网下载地址:https://dev.mysql.com/downloads/mysql/
安装建议:Ⅰ尽量不要使用.exe安装,会往注册表里走,不好卸载
Ⅱ尽可能使用压缩包安装
注意:如果掌握了MySQL,还可以学习Oracle、MongoDB等数据库。

4.JavaWeb

4.1 基本概念

4.1.1 前言

Web开发:Web就是网页,可以从网上拿到一定的资源。
1)静态Web
由HTML+CSS组成。
提供给所有人看的数据不会发生变化。
2)动态Web
目前几乎所有的网页都是动态的。
提供给所有人看的数据都会发生变化,且每个人在不同的时间、不同的地点看到的信息各不相同。
技术栈:ASP、PHP、JSP/Servlet
在Java中动态Web资源开发的技术统称为JavaWeb。

4.1.2 Web应用程序

Web应用程序是可以提供浏览器访问的程序。
a.html、b.html……多个Web资源,这些Web资源可以被外界访问,对外界提供服务。
能访问到的任何一个页面或者资源,都存在于这个世界某个角落的计算机上。
URL统一资源定位符,通过它来进行访问。
这个统一的Web资源会被放在同一个文件夹下,Web应用程序——>Tomcat服务器。
一个Web应用由多部分组成(静态Web、动态Web)
①HTML+CSS+JS
②JSP/Servlet
③Java程序
④jar包
⑤配置文件(Properties)
Web应用程序编写完毕后,若想提供给外界访问,需要一个服务器来统一管理。

4.1.3 静态Web

*.htm、 *html,这些都是网页的后缀,如果服务器上一直存在这些东西,就可以通过网络直接进行读取。


静态Web有关工作原理

静态Web存在的缺点
①Web页面无法动态更新,所有用户看到的都是同一个页面。
如轮播图、点击特效都是伪动态,用JavaScript(实际开发中使用最多的)和VBScript来实现。
②它无法和数据库交互(数据无法持久化,用户无法交互)。

4.1.4动态Web

Web的页面展示效果因人而异。


动态Web有关工作原理

①动态Web存在的缺点:加入服务器的动态Web资源出现了错误,需要重新编写后台程序,重新发布(停机维护)。
②动态Web的优化:
ⅠWeb页面可以动态更新,所有用户看到都不是同一个页面。
Ⅱ它可以与数据库交互(数据持久化)。

4.2 Web服务器

4.2.1 技术详解

1)ASP
由微软开发,国内最早流行的就是ASP。
在HTML中嵌入了VB的脚本,ASP+COM。
在ASP开发中,基本一个页面都有几千行的代码,页面及其混乱,维护成本高。
用C#编写,用IIS服务器。
2)PHP
开发速度很快,功能很强大,跨平台,代码很简单。
无法承接大访问量的情况(局限性)。
3)JSP/Servlet
SUN公司主推的B/S架构(浏览器和服务器)。
基于Java语言(目前世界上所有的大公司,或者一些开源的组件,都是用Java写的)。
可以承载三高(高并发、高可用、高性能)问题带来的影响。
语法像ASP,利于学习,由ASP——>JSP,易于加强市场强度。

4.2.2 Web服务器详解

服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。
1)IIS:由微软开发,是Windows中自带的。
2)Tomcat
Tomcat是Apache软件基金会的一个核心项目,最新的JSP和Servlet规范总是能在Tomcat中得到体现,因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。
Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下普遍使用,是开发和调试JSP的首选。对于一个Java初学Web的人来说,它是最佳选择。
Tomcat实际上是运行JSP和Servlet。Tomcat最新版本为9.0。
以后可以尝试自己编写Tomcat服务器。
下载完软件必备须知
Ⅰ安装或者解压它。
Ⅱ了解其配置文件及目录结构。
Ⅲ了解其作用。

5.SSM

5.1 MyBatis

5.1.1 MyBatis简介

①MyBatis是一款优秀的持久层框架
②它支持定制化 SQL、存储过程以及高级映射。
③MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
④MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
⑤MyBatis本是apache的一个开源项目, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。

5.1.2 获得MyBatis

①Maven仓库

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.2</version>
</dependency>

②Github:https://github.com/mybatis/mybatis-3/releases
MyBatis中文文档:https://mybatis.org/mybatis-3/zh/index.html

5.1.3 为什么需要MyBatis?

帮助程序员将数据存入到数据库中。
方便
传统的JDBC代码太复杂,为了简化,实现自动化操作。
不用MyBatis也可以,但MyBatis更容易上手。
技术没有高低之分!
MyBatis的优点
Ⅰ简单易学且灵活。
Ⅱsql和代码的分离,提高了可维护性。
Ⅲ提供映射标签,支持对象与数据库的orm字段关系映射。
Ⅳ提供对象关系映射标签,支持对象关系组建维护。
Ⅴ提供xml标签,支持编写动态sql。

5.2 Spring

5.2.1 简介

Spring的推出推动了软件行业的发展。
2002年,Rod Jahnson首次推出了Spring框架的雏形——interface21框架。
2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。
Rod Jahnson是悉尼大学的博士,然而他的专业不是计算机,是音乐学。
Spring理念:使现有技术更加实用。Spring本身就像是一个大杂烩,整合了现有的框架技术。
官网:http://spring.io/
官方下载地址:https://repo.spring.io/libs-release-local/org/springframework/spring/
Github:https://github.com/spring-projects

所需导入的依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.8</version>
</dependency>
5.2.2 优点

总结:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。

5.2.3 组成

Spring框架是一个分层架构,由7个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式。


官网的Spring架构图

组成Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:


Spring框架的架构图
5.2.4 扩展

SpringBoot与SpringCloud
SpringBoot是Spring的一套快速配置脚手架,可以基于SpringBoot快速开发单个微服务。
SpringCloud是基于SpringBoot实现的。
SpringBoot专注于快速、方便集成的单个微服务个体,SpringCloud关注全局的服务治理框架。
SpringBoot使用了约束优于配置的理念,很多集成方案已经选择好了,能不配置就不配置。
SpringCloud很大的一部分是基于SpringBoot来实现,SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系。
SpringBoot在SpringCloud中起到了承上启下的作用,如果你要学习SpringCloud必须要学习SpringBoot。

SpringBoot与SpringCloud

5.3 SpringMVC

5.3.1 简述

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。
SpringMVC官方文档:https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#spring-web
Spring MVC的特点
①轻量级,简单易学。
②高效,基于请求响应的MVC框架。
③与Spring兼容性好,无缝结合。
④约定优于配置。
⑤功能强大:RESTful、数据验证、格式化、本地化、主题等。
⑥简洁灵活。
Spring的web框架围绕DispatcherServlet(调度Servlet)设计。
DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解形式进行开发,十分简洁。
正因为SpringMVC、简单、便捷、易学,天生和Spring无缝集成(使用SpringIoC和AOP),使用约定优于配置。能够进行简单的junit测试,支持Restful风格,异常处理、本地化、国际化、数据验证 , 类型转换、拦截器等等。

5.3.2 中心控制器

Spring的web框架围绕DispatcherServlet设计。DispatcherServlet的作用是将请求分发到不同的处理器。从Spring 2.5开始,使用Java 5或者以上版本的用户可以采用基于注解的controller声明方式。
Spring MVC框架像许多其他MVC框架一样,以请求为驱动,围绕一个中心Servlet分派请求及提供其它功能,DispatcherServlet是一个实际的Servlet(它继承自HttpServlet基类)。


Servlet与DispatcherServlet在SpringMVC中的作用

SpringMVC的原理如下图所示

SpringMVC的原理图

当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

5.3.3 SpringMVC执行原理
SpringMVC的工作流程

图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现。
简要分析执行流程
①DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
假设请求的url为:http://localhost:8080/SpringMVC/hello,将url拆分成三部分:http://localhost:8080为服务器域名,SpringMVC部署在服务器上的Web站点,hello表示控制器。通过分析,如上url表示为:请求位于服务器localhost:8080上的SpringMVC站点的hello控制器。
②HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler。
③HandlerExecution表示具体的Handler,其主要作用是根据url查找控制器。
④HandlerExecution将解析后的信息传递给DispatcherServlet,如解析控制器映射等。
⑤HandlerAdapter表示处理器适配器,其按照特定的规则去执行Handler。
⑥Handler让具体的Controller执行。
⑦Controller将具体的执行信息返回给HandlerAdapter,如ModelAndView。
⑧HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet。
⑨DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的逻辑视图名。
⑩视图解析器将解析的逻辑视图名传给DispatcherServlet。
⑪DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图。
⑫最终视图呈现给用户。

6.大前端进阶(Vue.js)

6.1 Vue简介

Vue.js是一款渐进式的JavaScript框架。
什么是渐进式?
渐进式就是指我们可以由浅入深地、由简单到复杂的这种方式去使用Vue.js。
Vue.js优点
①体积小
压缩后33K。
②更高的运行效率
基于虚拟dom,一种可以预先通过JavaScript进行各种计算,把最终的DOM操作计算出来并优化的技术,由于这个DOM操作属于预处理操作,并没有真实的操作DOM,所以叫做虚拟DOM。
③双向数据绑定
让开发者不用再去操作dom对象,把更多的精力投入到业务逻辑上。
④生态丰富、学习成本低
市场上拥有大量成熟、稳定的基于Vue.js的ui框架、常用组件!拿来即用实现快速开发!
对初学者友好、入门容易、学习资料多。
总体而言,Vue.js是一款我们值得去学习和使用的JavaScript框架。
Vue.js经过几年的发展的被广泛的应用于Web端开发、移动端开发、跨平台应用开发等等场景的开发。应该说Vue.js是前端人员开发的必修技能。
Vue.js招聘市场需求大、前景较好。

6.2 Vue的UI框架

7.微服务开发

7.1 SpringBoot

7.1.1 什么是Spring

Spring是一个开源框架,2003年兴起的一个轻量级的Java开发框架,作者:Rod Johnson。
Spring是为了解决企业级应用开发的复杂性而创建的,简化开发。

7.1.2 Spring是如何简化Java开发的

为了降低Java开发的复杂性,Spring采用了以下4种关键策略:

7.1.3 什么是SpringBoot

学过Javaweb的人就知道,开发一个web应用,从最初开始接触Servlet结合Tomcat,跑出一个Hello Wolrld程序,是要经历特别多的步骤。 后来就用了框架Struts,再后来是SpringMVC,到了现在的SpringBoot,过一两年又会有其他Web框架出现。
言归正传,什么是SpringBoot呢,就是一个Javaweb的开发框架,和SpringMVC类似,对比其他Javaweb框架的好处,官方说是简化开发,约定大于配置,能迅速的开发web应用,几行代码开发一个http接口。
所有的技术框架的发展似乎都遵循了一条主线规律:从一个复杂应用场景衍生一种规范框架,人们只需要进行各种配置而不需要自己去实现它,这时候强大的配置功能成了优点。发展到一定程度之后,人们根据实际生产应用情况,选取其中实用功能和设计精华,重构出一些轻量级的框架。之后为了提高开发效率,嫌弃原先的各类配置过于麻烦,于是开始提倡“约定大于配置”,进而衍生出一些一站式的解决方案。
这就是Java企业级应用——>J2EE-——>spring——>springboot的过程。
随着Spring不断的发展,涉及的领域越来越多,项目整合开发需要配合各种各样的文件,慢慢变得不那么易用简单,违背了最初的理念,甚至人称配置地狱。SpringBoot正是在这样的一个背景下被抽象出来的开发框架,目的为了让大家更容易的使用Spring、更容易的集成各种常用的中间件、开源软件。
SpringBoot基于Spring开发,SpirngBoot本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并不是用来替代Spring的解决方案,而是和Spring框架紧密结合用于提升Spring开发者体验的工具。SpringBoot以约定大于配置的核心思想,默认帮我们进行了很多设置,多数SpringBoot应用只需要很少的 Spring 配置。同时它集成了大量常用的第三方库配置(例如Redis、MongoDB、Jpa、RabbitMQ、Quartz等等),SpringBoot应用中这些第三方库几乎可以零配置的开箱即用。
简单来说就是SpringBoot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合
了所有的jar包,SpringBoot整合了所有的框架 。
SpringBoot出生名门,从一开始就站在一个比较高的起点,又经过这几年的发展,生态足够完善,SpringBoot已经当之无愧成为Java领域最热门的技术。
SpringBoot的主要优点

7.2 SpringCloud

7.2.1 微服务概述

1)什么是微服务
微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。究竟什么是微服务呢?我们在此引用 ThoughtWorks 公司的首席科学家Martin Fowler于2014年提出的一段话:
原文:https://martinfowler.com/articles/microservices.html
汉化:https://www.cnblogs.com/liuning8023/p/4493156.html
就目前而言,对于微服务,业界并没有一个统一的、标准的定义。
但通常而言,微服务架构是一种架构模式,或者说是一种架构风格, 它提倡将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
可能有的人觉得官方的话太过生涩,我们从技术维度来理解下:
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种小而独立的处理过程,类似进程的概念,能够自行单独启动或销毁,拥有自己独立的数据库。
2)微服务与微服务架构
微服务
强调的是服务的大小,他关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭义的看,可以看做是IDEA中的一个个微服务工程,或者Moudel。
微服务架构
一种新的架构形式,Martin Fowler在2014提出。
微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言,工具对其进行构建。
3)微服务优缺点
优点

4)微服务技术栈有哪些?

微服务条目 微服务条目
服务开发 SpringBoot、Spring、SpringMVC
服务配置与管理 Netflix公司的Archaius、阿里的Diamond等
服务注册与发现 Eureka、Consul、Zookeeper等
服务调用 Rest、RPC、gRPC
服务熔断器 Hystrix、Envoy等
负载均衡 Ribbon、Nginx等
服务接口调用(客户端调用服务的简
化工具) Feign等
消息队列 Kafka、RabbitMQ、ActiveMQ等
服务配置中心管理 SpringCloudConfig、Chef等
服务路由(API网关) Zuul等
服务监控 Zabbix、Nagios、Metrics、Specatator等
全链路追踪 Zipkin、Brave、Dapper等
服务部署 Docker、OpenStack、Kubernetes等
数据流操作开发包 SpringCloud Stream(封装与Redis、Rabbit、Kafka等发送接收消息)
事件消息总线 SpringCloud Bus
SpringCloud Alibaba

5)选择SpringCloud作为微服务架构的原因
选型依据

当前各大IT公司用的微服务架构有哪些?

各微服务框架对比

功能点/服务框架 Netflix/SpringCloud Motan gRPC Thrift Dubbo/DubboX
功能定位 完整的微服务框架 RPC框架,但整合了ZK或Consul,实现集群环境的基本服务注册/发现 RPC框架 RPC框架 服务框架
支持Rest 是,Ribbon支持多种可插拔的序列化选择
支持RPC 是(Hession2)
支持多语言 是(Rest形式)?
负载均衡 是(服务端zuul+客户端Ribbon),zuul-服务、动态路由、云端负载均衡Eureka(针对中间层服务器) 是(客户端) 是(客户端)
配置服务 Netfix Archaius,Spring Cloud Config Server集中配置 是(zookeeper 提供)
服务调用链监控 是(zuul),zuul提供边缘服务,API网关
高可用/容错 是(服务端Hystrix+客户 端Ribbon) 是(客户端) 是(客户端)
典型应用案例 Netflix Sina Google Facebook
社区活跃程度 一般 一般 2017年后重新开始维护,之前中断了5年
学习难度 中断
文档丰富程度 一般 一般 一般
其它 Spring Cloud Bus为应用程序带来了更多管理端点 支持降级 Netflix 内部在开发集成gRPC IDL定义 实践的公司比较多
7.2.2 SpringCloud简介

1)SpringCloud是什么
Spring官网:https://spring.io/

SpringCloud SpringCloud结构图

SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。
SpringCloud利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,他们都可以用SpringBoot的开发风格做到一键启动和部署。
SpringBoot并没有重复造轮子,它只是将目前各家公司开发的比较成熟,经得起实际考研的服务框架组合起来,通过SpringBoot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂,易部署和易维护的分布式系统开发工具包。
SpringCloud是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶。
2)SpringCloud和SpringBoot关系
SpringBoot专注于快速方便的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁,决策竞选、分布式会话等等集成服务。
SpringBoot可以离开SpringCloud独立使用,开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。
SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架。

7.3 MyBatisPlus

需要基础:MyBatis、Spring、SpringMVC
学习MyBatisPlus可以节省大量的时间,所有的CRUD代码它都可以自动化完成。
市面上还有JPA、tk-mapper也可以完成这样的操作。
官网:https://mp.baomidou.com/
官网上有一句话叫为简化开发而生。
MyBatis-Plus(简称 MP)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
愿景:我们的愿景是成为MyBatis最好的搭档,就像魂斗罗中的1P、2P,基友搭配,效率翻倍。

特性

8.运维

8.1 Linux

8.1.1 学习Linux的原因

Linux诞生了这么多年,以前说如何能取代windows系统,现在这个口号已经小多了,任何事物发展都有其局限性都有其天花板。就如同在国内再搞一个社交软件取代腾讯一样,想想而已基本不可能,因为用户已经习惯于使用微信交流,不是说技术上实现不了解,而是用户已经习惯了。
用习惯了windows操作系统,再让大家切换到别的操作系统基本上是不可能的事情,改变一个人已经养成的习惯太难。没有办法深入到普通人的生活中,并不意味着Linux就没有用武之地了。在服务器端,在开发领域Linux倒是越来越受欢迎,linux在开源社区的地位依然岿然不动。
尤其是作为一个后端程序员,是必须要掌握Linux的。

8.1.2 Linux简介

Linux内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX(可移植操作系统接口)和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。
Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

8.1.3 Linux发行版

Linux的发行版说简单点就是将Linux内核与应用软件做一个打包。


Linux内核

目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS等。


Linux发行版
8.1.4 Linux应用领域

今天各种场合都有使用各种Linux发行版,从嵌入式设备到超级计算机,并且在服务器领域确定了地位,通常服务器使用LAMP(Linux + Apache + MySQL + PHP)或LNMP(Linux + Nginx+ MySQL + PHP)组合。
目前Linux不仅在家庭与企业中使用,并且在政府中也很受欢迎。

8.1.5 Linux与Windows对比
Linux与Windows对比

8.2 Nginx

8.2.1 项目架构和演进
项目架构和演进
8.2.2 单体部署
单体架构的两种方式

以上的两种方式,无论是用一个机器部署还是三个服务器部署,都属于一种单体架构的模式。
特点

面临挑战

8.2.3 集群

集群:由多个服务器节点共同来完成一个相同业务。
分布式:多个服务器运行的业务是不同,然后共同协助来完成一个整体的服务应用。
集群优势

部署集群的注意事项

8.2.4 什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,Nginx 1.0.4发布。底层是用C语言开发。
Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用Nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
主要功能反向代理、通过配置文件可以实现集群和负载均衡、静态资源虚拟化、限流等。
常见的服务器

8.3 Docker

8.3.1 Docker出现的原因

一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员是极大的考验。
环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。解决开发人员说的“在我的机器上可正常工作”的问题。
之前在服务器配置一个应用的运行环境,要安装各种软件,就拿一个基本的工程项目的环境来说吧,Java/Tomcat/MySQL/JDBC驱动包等。安装和配置这些东西有多麻烦就不说了,它还不能跨平台。假如我们是在Windows上安装的这些环境,到了Linux 又得重新装。况且就算不跨操作系统,换另一台同样操作系统的服务器,要移植应用也是非常麻烦的。
传统上认为,软件编码开发/测试结束后,所产出的成果即是程序或是能够编译执行的二进制字节码文件等(Java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让维运团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的状况。
Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。通过Docker镜像 ( images ) 将应用程序所需要的系统环境,由下而上打包,达到应用程序跨平台间的无缝接轨运作。
Docker的思想来自于集装箱,集装箱解决了什么问题?在一艘大船上,可以把货物规整的摆放起来。并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响。那么我就不需要专门运送水果的船和专门运送化学品的船了。只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把它们都运走。
历史及发展
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。
这家公司主要提供基于PaaS的云计算技术服务。具体来说,是和LXC有关的容器技术。
后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为——Docker。
Docker技术诞生之后,并没有引起行业的关注。而dotCloud公司,作为一家小型创业企业,在激烈的竞争之下,也步履维艰。
正当他们快要坚持不下去的时候,脑子里蹦出了“开源”的想法。
什么是“开源”?开源,就是开放源代码。也就是将原来内部保密的程序源代码开放给所有人,然后让大家一起参与进来,贡献代码和意见。
有的软件是一开始就开源的。也有的软件,是混不下去,创造者又不想放弃,所以选择开源。自己养不活,就吃“百家饭”嘛。
2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的Solomon Hykes正式决定,将Docker项目开源。
不开则已,一开惊人。
越来越多的IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。
Docker的人气迅速攀升,速度之快,令人瞠目结舌。
开源当月,Docker 0.1 版本发布。此后的每一个月,Docker都会发布一个版本。到2014年6月9日,Docker 1.0 版本正式发布。
此时的Docker,已经成为行业里人气最火爆的开源技术,没有之一。甚至像Google、微软、Amazon、VMware这样的巨头,都对它青睐有加,表示将全力支持。
Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻”。
在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。
相信很多人都用过虚拟机。虚拟机,就是在你的操作系统里面,装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。
在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。
虚拟机属于虚拟化技术。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。
虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。
而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。
它启动时间很快,几秒钟就能完成。而且,它对资源的利用率很高(一台主机可以同时运行几千个Docker容器)。此外,它占的空间很小,虚拟机一般要几GB到几十GB的空间,而容器只需要MB级甚至KB级。
正因为如此,容器技术受到了热烈的欢迎和追捧,发展迅速。
Docker理念
Docker是基于Go语言实现的云开源项目。
Docker的主要目标是“Build,Ship and Run Any App , Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。
Linux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在Docker容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

8.3.2 Docker能做什么

1)之前的虚拟机技术
虚拟机(virtual machine)就是带环境安装的一种解决方案。
它可以在一种操作系统里面运行另一种操作系统,比如在Windows 系统里面运行Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。

之前的虚拟机技术
虚拟机的缺点

2)容器虚拟化技术
由于前面虚拟机存在这些缺点,Linux发展出了另一种虚拟化技术:Linux容器(Linux Containers,缩
写为 LXC)。
Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行。

容器虚拟化技术

比较了 Docker 和传统虚拟化方式的不同之处:

3)开发/运维(DevOps)
更快速的应用交付和部署
传统的应用开发完成后,需要提供一堆安装程序和配置说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行。Docker化之后只需要交付少量容器镜像文件,在正式生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间。
更便捷的升级和扩缩容
随着微服务架构和Docker的发展,大量的应用会通过微服务方式架构,应用的开发构建将变成搭乐高积木一样,每个Docker容器将变成一块“积木”,应用的升级将变得非常容易。当现有的容器不足以支撑业务处理时,可通过镜像运行新的容器进行快速扩容,使应用系统的扩容从原先的天级变成分钟级甚至秒级。
更简单的系统运维
应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG。当出现程序异常时,也可以通过测试环境的相同容器进行快速定位和修复。
更高效的计算资源利用
Docker是内核级虚拟化,其不像传统的虚拟化技术一样需要额外的Hypervisor(管理程序)支持,所以在一台物理机上可以运行很多个容器实例,可大大提升物理服务器的CPU和内存的利用率。

9.常用中间件

9.1 Redis

与MySQL不同,Redis是是当前最热门的NoSQL数据库之一。

9.1.1 Redis是什么

Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为数据结构服务器Redis。
与其他key-value缓存产品有以下三个特点:

9.1.2 Redis可以做什么

内存存储和持久化:redis支持异步将内存中的数据写到硬盘上,同时不影响继续服务。
取最新N个数据的操作,如:可以将最新的10条评论的ID放在Redis的List集合里面。
发布、订阅消息系统、地图信息分析、定时器、计数器……

9.1.3 特性

9.2 ElasticSearch

Elaticsearch,简称为es,es是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据。本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用。

9.2.1 ElasticSearch的由来

多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。
直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。
后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。
Shay的妻子依旧等待着她的食谱搜索……

9.2 使用场景
还有如RabbitMQ、Kafka等很多实用的中间件等待大家去学习!
上一篇下一篇

猜你喜欢

热点阅读