开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Overview】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/75/detail/15818
Overview
内容介绍:
一.Syllabus
二.Exams and Scores
三.Schedule & Textbook
一、Syllabus
首先需要先了解一下企业级应用系统的特征,之前开发的在线电子输电只能说是一个外部应用,学会了写一个外部应用,但是还有很多细节的问题没有考虑,包括性能、可靠性、安全性等。
这些方面怎么样能够满足要求,所以企业级指要有一定的规模,需要了解企业级应用的特征,然后基于上学期讲的内容逐个展开。首先讲解服务器端的开发,其中先讲分布式对象和远程方法调用,之前在写外部应用时,实际上没有仔细考虑过这个问题,基本上都是用 spring 来开发服务,该服务到底需不需要状态,所谓的状态是什么意思,需要去探讨。
然后,会花两节课的时间来讲解 Java 的安全体系,这部分内容比较复杂,从最简单的自解码加密到最复杂,比如单点登录,像 java count 的基本原理是什么,这中间就包括了用户的认证、授权。当然,此处的认证授权和以前做大作业,把用户名和密码存到数据库里面,最多将密码加密后存储的概念是不一样的,它要更复杂一些,有所谓的可堆栈和可插拔的安全模块来做认证和授权,再到代码的签名,然后再到传输的加密等等,这是 java 的安全体系。
之后讲解通信,实际上已经讲过一些异步通信方式,在浏览器里面通过阿贾克斯的方式发请求到后台,然后前后台通过 Jason 来传递数据。在大三的这门课里面,将拓展异步通信的机制,除了前台异步发通信请求到后台之外,还需要考虑如果前台不是 HTTP 的,不是 javascript 脚本,而是其他的应用,那么双方之间应该怎么去交互。这里会讲到 Java 的 GMS,另外会举一个开源的例子,比如卡普卡,其在外面的应用也非常的多,来谈一谈卡普卡怎么用。第二,如果这种通信不是服务器端在响应客户端的请求,而是服务器端想主动把消息推给客户端,这时该怎么办。此时可以以 websocket 的协议来讲解,典型的应用比如在线聊天室,再比如有一个股票的应用,那么它的行情推送都不是客户端直接发请求到服务器端,而是服务器端推送出来。
上课内容 |
上课要求 |
企业级应用系统概述,包括: 1.企业级应用系统特征 2.企业级应用系统体系架构演化 |
在《Web 应用开发技术》所开发的 E-Book 系统基础上,设计系统架构优化方案 |
服务器端程序开发1-远程方法调用与分布式对象: 1.远程方法调用-进程间通信机制 2.分布式对象-远程方法调用的对象封装 3.有状态服务与无状态服务的组合运用 服务器端程序开发2-Java 安全体系1: 1.字节码加密与解密 2.权限控制与自定义权限 |
1.在 E-Book 系统中,优化服务层设计,确定有状态与无状态服务的运用方式 2.在 E-Book 系统中,设计针对桌面应用的远程调用服务,实现按照书籍名称查询详情的功能 1.在 E-Book 系统中,编写自定义类加载器,实现字节码加解密 2.设计一种自定义的权限,可以实现对文件读取路径的控制 |
服务器端程序开发3-Java 安全体系2: 1.用户认证与授权 2.自定义认证模块 3.代码签名和单点认证 |
1.设计一种自定义的认证模块,通过对给定文件中的用户名、密码和角色来进行认证 2.将 E-Book 系统的代码进行打包签名,以便在安装时可以先进行验证 |
服务器端程序开发4-异步通信1: 1.消息通信机制与消息中间件 2.JMS 与消息驱动 Bean |
在 E-Book 系统中,增加一个消息驱动 Bean,接收用户下订单的需求 |
服务器端程序开发5-异步通信2: 1.WebSocket,向前端主动推送信息 2.异步通信综合应用-聊天室 |
在 E-Book 系统中,增加一个在线聊天室,实现网站用户在线对书籍进行讨论的功能 |
然后讲解事务管理,实际上在大二时蒋老师上的数据库的这门课里面已经提到过事物,那么这门课需要考虑的是在程序里面怎么去控制事物。控制事物按照蒋老师当时上课的内容,可知,至少包含两个方面,第一个方面需要定义事物从哪里开始,到哪里结束,这就是所谓的事物边界的划分。
第二个是当有多用户并发的访问的时候,事物和事物之间如何不干扰,这叫做事物的隔离。这门课要讲这两个东西,事物要注意的是,从大二开始一直讲,就告诉一个观念,很多东西不要硬编码,不要写死,就是所谓的声明式的控制事物边界应该怎么去做。然后再讲解多线程和并发编程,这里指的是单机上的,不是后面讲的更复杂的并行,此处单机上的多线程用到的是 Java 多线程的库,那么就涉及到类似在操作系统里写过的那些程序,只不过当时可能是用 C 来写的。现在是在 Java 里面,它包装的这些类库,如何来做多个线程之间的线程安全的编程。再往下是分布式的缓存,需要充分利用内存,怎么样减少对数据库的访问,因为毕竟数据库它存储在硬盘上,虽然数据库本身也在大量的缓存,但是数据库服务器可能是远程的。怎么样利用本地,即不属于应用的这台服务器的内存去缓存大量的数据,来提高数据保护效率。接下来,在大二的时候就提到过一点,数据都存在关系型数
库里,但关系型数据库不是唯一的一种存储方式,还可以存在 no circle 的数据库里,比如以前谈到了 mangodb,这里面要再谈一谈一些跟它类似的,但是结构又不太一样的 No circle的数据库。比如,为了支持全文搜索的 lucene,它是怎么存数据的,再比如,图数据库 Neo4J 是怎么存数据的,就是要告诉大家数据未来在一个复杂的系统里面,它的存储实际上可能是多种数据库系统并存的,其他的应该适用于什么数据库存储,应该怎么去用是需要探讨的。
然后谈谈外部开发,实际上现在用工具开发已经是比较简单的事情,需要借着外部开发的内容来谈一谈什么是音像服务的架构和微服务的架构。
上课内容 |
上课要求 |
服务器端程序开发6-事务管理: 1.事务属性 2.编程式事务边界定义和声明式事务边界定义 3.事务隔离级别与分布式事务 |
在 E-Book 系统中增加事务控制 |
服务器端程序设计7-多线程与并发编程: 1.Java 多线程编程 2.多线程编程实例 3.线程安全的数据结构 |
在 E-Book 系统中增加对多线程并发的控制 |
服务器端程序设计8-分布式缓存: 1.分布式缓存原理与 Memcached 2.内存数据库与 Redis 3.集群与负载均衡 |
在 E-Book 系统中增加 Memcached 或 Redis 缓存对书籍数据进行缓存 |
服务器端程序设计9-全文搜索与图数据库: 1.全文搜索原理 2.Lucene 全文搜索编程3Neo4J 图数据库的应用 |
1.在 E-Book 系统中增加对书评全文进行搜索的功能 2.在 E-Book 系统中增加对用户好友关系进行维护的图数据库管理功能 |
服务器端程序设计10-Web 服务开发: 1.Web 服务架构 2.REST Web 服务开发 3.面向服务架构与微服务架构 |
将 E-Book 系统中的下订单功能开发成为Web Service |
这些讲完之后,刚才讲的都是在一个服务器的后端有一个服务器,怎么样充分利用它的资源,如果服务器的资源不够,一台机器不够,就需要建立一个集群,在集群上面能做些什么。这就过渡到第二块,所谓的分布式进行处理框架,会去用一些现成的框架来讲解,比如 Hadoop MapReduce 及后续衍生的版本 yarn,然后有 spark、storm,或者是 spark storm string,像这种分布式文件系统,分布式的数据库等等,它要解决的问题是在一个集群里面,如何去利用好这些计算资源,组成对用户来说,看到超级的一个服务器。
接下来谈系统数和运维,即真正有了一个集群之后,当集群也不能满足要求的时候,需要去寻求更多的计算资源,这时自然而然就会想到云,那么云是什么样的?为什么要讲边缘计算,讲云端融合的计算,它是什么意思?一旦到了云里,可能有很多的数据在存储的时候会有很琐碎的一些数据,它存储的时候不一定适合关系型数据库,或者之前讲的 no circle 的数据库,它还要考虑到一些数据存储的量、读取的方便、数据特点。比如,一次性写入的 load,它不会去修改,但要访问最近的,希望它的性能最高。所以会谈一谈类似于这种日志性数据库,它的工作原理是什么,怎么去应用。
上课内容 |
上课要求 |
分布式并行处理框架1-并行框架: 1.Hadoop MapReduce 和 YARN 2.Spark 内存并行处理 3.流式数据并行处理 |
在 E-Book 系统中使用 MapReduce 功能来处理日志数据 |
分布式并行处理框架2-分布式文件系统 1.GFS 原理 2.HDFS 实现与应用 |
在 HDFS 中存储日志文件,并编写读写模块 |
分布式并行处理框架3-分布式数据库: 1.Bigtable 与 Hbase 2.Hive 数据仓库 |
构建可用于 E-Book 系统的数据仓库 |
系统部署与运维1-云计算与边缘计算 1.云计算与云应用 2.边缘计算技术 |
设计将 E-Book 系统迁移到云中的方案 |
系统部署与运维2-日志型数据库 1.RocksDB 日志型数据库 2.日志型数据的分析与处理 |
设计 E-Book 系统利用 RocksDB 存储日志数据的方案 |
下一个单元,分几次课的时间给大家讲一讲有关数据科学的内容,这部分内容主要是用python 语言来写,因为 python 在做数据科学、人工智能的时候非常适合,这里边从数据的获取,即爬虫,到数据回来以后清洗,再到数据的分析,最后到可视化,这些内容是怎么去实现。在做这一块处理的时候,可以用到 python Jupyter 工具,它里面的内容就是把本来应该是写好的 python 程序在命令行底下运行的,可以用 Juter Notebook 的方式去比较方便的形式呈现出来。讲到这里,可能要用到这个工具,如果现在有时间,可以先准备一下。
上课内容 |
上课要求 |
数据科学1-数据获取与清洗: 1.数据科学方法学 2.数据获取-网络爬虫 3.数据预处理-数据清洗 |
编写 Python Jupyter Notebook 实现网络数据爬取和数据清洗 |
数据科学2-数据分析: 1.统计性描述 2.相关性分析 |
编写 Python Jupyter Notebook 实现数据分析 |
数据科学3-数据可视化: 1.数据可视化的意义 2.Python 数据可视化库的使用 |
编写 Python Jupyter Notebook 实现数据可视化 |
接下来讲接机器学习的一些内容,这部分内容仍然是用 python 来讲的,一共讲几个部分。
第一部分,首先谈谈简单的机器学习方法,包括回归角色数之类,他们的特点是什么。因为不能提到机器学习,只能反映出来深度学习或者神经网络,其实还包括很多东西,先讲一讲简单的机器学习方法,让大家有一个认识。主要是用这些学习方法明白什么是所谓的监督学习、非监督学习、强化学习等等,理解这些意思。然后需要理解为什么机器学习面对的数据最终预测的目标,有离散型的,有连续型的,它们的预测和分类有什么差异。过渡到现在最流行的,或者最主流的人工神经网络上,在这里先从全连接的人工神经网络讲起。那么会讲其自己动手去构建的一个过程,也就是在什么库都会依赖的情况下,如何自己去构建出一个神经网络。当然什么都是自己建,这是不现实的,做这一部分的目的是去深入理解什么是神经网络。然后讲用到的工具,比如 tangsorFlow 和 Keras 两个东西组合怎么去开发出来,会非常方便的开发出来自己的人工神经网络。然后在计算机视觉这个领域里,讲解卷积神经网络,它的原理是什么及怎么应用的。在自然语言处理领域里,讲解循环神经网络以及它的应用。最后谈一谈,无论是哪一种神经网络,在做网络调优训练的时候,可以采取一些什么样的措施或者是技术,这就是上课要讲的所有的内容。
上课内容 |
上课要求 |
机器学习1-简单机器学习方法: 1.回归与连续值的预测 2.决策树与离散值的分类 3.聚类与非监督学习 |
编写 Python Jupyter Notebook 实现回归、决策树和聚类算法 |
机器学习2-人工神经网络: 1.神经网络的结构与前向计算方式 2.神经网络的学习和反向传播算法 |
自己编写 Python 程序实现手写体识别神经网络 |
法机器学习3-卷积神经网络: 1.卷积神经网络的特征 2.利用 TensorFlow 与 Keras 构建卷积神经网络 3.计算机视觉中典型的卷积神经网络 |
1.利用 TensorFlow 和 Keras 来实现手写体识别卷积神经网络 2.通过模型对比,理解网络结构对模型精度的影响 |
机器学习4-循环神经网络: 1.循环神经网络的特征 2.自然语言处理的基本概念 3.循环神经网络在自然语言理解中的应用 |
1.构建用于文本分类的循环神经网络 2.通过模型对比,理解各种网络模型在文本分类精度上的差异 |
机器学习5-神经网络的训练: 1.数据增强和正则化等输入预处理 2.Dropout 及早停止和批量梯度下降等 |
尝试通过各种优化方法来训练神经网络,并对比它们的效果 |
二、Exams and Scores
刚才讲的是授课内容,右边这一列是上课要求,就是希望每一次能够完成的一些作业。上课时间总共是12周,所以课程最后成绩是在十二次课中每次布置一次作业,完成作业后上交,每一次作业是5分,这样会有60分。理想作业是在原有的电子输程的基础上将新的功能集成进去,但是如果做不成,就会做成一堆散的作业,这样分数可能会收到影响。不管怎样,到考试周的最后,不影响考试做一次口头的答辩,就和大二时做的答辩一样,此处有10分,主要是看知识综合应用怎么样,整个项目做的怎么样。最后考试是30分,仍然和大二时期末考试一样,是开卷,这30分主要是平衡成绩。另外,为了检查如果抛开课程内容,面临实际问题时,到底能否掌握方法。大二考试时出了20道主观题,没有标准答案,只有参考答案,上课时讲到过所有的题答是或不是都可以,只要答案充分合理,原因是在设计方面很难确保某一个方案一定合适,只是在采用某个方案时看中的是分析合理即可。所以考试时仍然延续大二的模式,20个主观题,每一个5分,总共占剩下的30%,课程安排和大二基本上大同小异。
1、Exams-30%
-Finalexam30%
2、Assignments&Project-70%
(1) Assignmentand Iteration 60%
①About 12 assignments
(2)Finalcheck 10%
①Oral defense in the 18th week
3、Requirement:
(1)To develop an improved version of e-Book store.
(2)We will publish the specific requirements in every class.
三、Schedule & Textbook
这是上课的时间,按照之前的安排时间还是一样,每周一的时间,两点到三点四十和礼拜四的早上十点到十一点四十,现在是在线上上学,等到开学之后要恢复到教室里,到时候再听安排,反正时间就是这样。然后有两位助教,因为助教有两个同学更容易彼此间商量一下,在解决一些比较难解决问题的时候,彼此之间有一个可以讨论的对象。以前做作业时,碰到很多问题都很稀奇古怪,解决起来也挺麻烦,所以有两位助教
比如,在第二次课里面 mri 这个例子,其里面编译好之后,这里它需要三方一起动作,要先起一个服务器,所以将其 build 出来的 class 目录里面,去跑一个 mri 的 register,它跑起来,实际上它没有什么输出,只是跑起来了。
之后要先把服务器端跑起来,看到它的输出是已经绑定到 mri 的注册表上了,它正在等着客户端调用。现在跑一个客户端,就可以看到客户端从服务器那端就去调用它之后,得到了一个返回的值,即烤面包机,它是24.95美元,这里面的代码在底下,上面是有 built 出来东西,可以看到在服务器端,它实际上是调用的,可以看到它有一个产品的目录,面包机24.95,后面是微波炉49.95。而客户端,通过调用远端的服务,分布式对象,要求知道面包机的价格,于是就得到了这个价格,这是一个例子。真正上到这一节课的时候,还会详细去讲解。
那么此处给的代码就是在这里面,将这种源代码把它拷贝了下来,压缩了以后,传递到上头,每一节课的后面都会有一个或多个例子,除非这节课东西可能不太适合做例子,比如安全体系2,实际上这个例子放到前面去了,在前面可以看到。每一节课基本上都会放一个或者多个例子,所以把开发环境再次准备好,最好在这一周把相应的环境恢复出来,也就是 bookstore 的例子恢复出来。在这个网页上,是有最新公告的,之所以能来上这个课,肯定是看到了这里面发的通知,所以时不时的关注一下,按道理是发布公告以后,是能够收到邮件的。看完这个系统,它里面还会有视频,在大二上完课之后录了一个视频,这个视频在上完之后,在这个交大指定的视频服务器上,然后把链接放到其中,这样以后每一次上课,若有没有听懂的,或者听的比较模糊的地方,可以回过头来看课程的录像。但是按照学校里发的通知,这个视频只能在校内看,但其实在家里也能看到,总之,若有不清楚的地方,可以通过回看课程录像去了解。对于作业,每一次作业里面可能会有不止一条的功能,主要对应的就是上课时两节课的内容。一定要按照这个内容去写,基本上课程的简介就讲到这里。
然后熟悉一下 zoo 的功能。在编写程序时,因为这台机器是新机器,所以安装的是 最新版本的 java13,如果将实例用到自己的机器上跑,若跑不出来,有可能是不太匹配的原因,自己重新下载更新一下,其他没有什么太大的问题。所有的例子在跑的时候都有需要注意的地方,比如刚展示的第一个例子,有一点需要注意,需要跑 server、 plant 和mri reduce 这三个东西。另外,Mri reduce 最好在编写的程序,编译完之后产生 plus 的文件里,目录里去跑它。否则,mri 它在启动的时候,当跑 server 的 mri 的 reg 时候会报错,找不到类。当然把它整个放到 class pass 里面也可以,即在某一个 class pass 里跑也可以。所以,所有的例子在跑的时候都需要注意一些问题,具体到上课的时候会去讲,现在拿下来去跑的时候,可能跑不出来,有些问题,不要紧,到时候讲课的时候会再详细的讲。公告在首页上经常不显示,需要时常注意即可。课程大纲可以先看一下,虽然讲了一遍,但需要仔细去看,内容确实比较多,可能有一些东西需要提前做准备。后面需要安装一些东西,比如,notebook,python 肯定要装一下,这些准备工作尽量在这周都能做完。
这门课对前端在大纲中没有提到,因为不是很复杂,前端也没有什么需要再改的地方了。上课时需要按照讲解的功能进行实现,不要求之前做的东西很完整,只要求之前有 spring 的后端和能够显示的前端就可以了。在课程网站上放的程序 demo,自己下载后跑一遍,了解一下,具体的还需要在学习的基础上运用到这些相关的实验。其中举的例子刚刚提到了,有可能跑不起来,因为有些地方需要注意,上课时会讲,当然若自己能够琢磨出来如何去跑更好,对照着课件看是否能明白。这节课讲到这里,下课后做准备,尤其是机器的开发环境还有大作业能恢复尽量恢复,将相关的环境都搭好,下次开始正式上课,今天的录像也会放到网站上,可以自行去观看,以后所有的课程录像全部都会放上去。