关于云计算
距离CMU神课15619-Cloud Computing 截课已经过去快一个月了。在刚结束的时候,一直想对这门课做个总结,主要总结这门课的内容,加强对所学到知识点的理解。
回想自己学习这门课的整个经历
花了很多时间,期中之后Team的Project开了再加上其他几门课的任务,连着熬夜也是有点吃不消;
踩了很多坑,这门课的特点是不会把所有的知识点都告诉你和步骤都告诉你。由于每一个项目步骤众多,如果不相信看漏一句话,或者漏了某个步骤,都会导致出现各种奇奇怪怪的问题,所以看writeup一定细心。重要的事情说三遍:细心,细心,细心。另外一些坑是人为设计的,这样的坑基本是要考摸索着踩的,如果有小伙伴一起踩坑的话,会省很多时间。当然在摸索的过程中,也是能学到很多东西的
最后收获也很丰富。对于转专业的同学或者之前对CS了解比较少的同学,还是强烈推荐这门课。通过这门课,一方面可以学到一些最新的技术Spark, Kafka等,另一方面对自己的基础也是一个很好的补充,对于我来说,补充对于各种数据库的了解,如何使用shell,如何用maven打包等等。
关于这门课的设计
这门课是无需去上课的,一切自学,然后做项目。
自学的话会有学习网页提供的,写的挺不错,与课程的Project基本是同步的,认真看的话,收获很大。每周五还有一次小测验,是对每章节知识点的考核,时间2小时,一般1个半小时能够完成。
Project的话,这门课主要是由5个大的Individual Project组成,然后再加上一个Team的Project。对于5个大的Project,又分为2-3个小的project,每周一个。
这门课每周的时间对于我来说大概在20-50个小时之间,对于在国内上本科的学生,觉得这门课的量实在是比较大的。所以如果选这门课,一定记住不要再选其他神课了
关于课程的Projects
Project 0 —— Exploring the cloud
主要内容是介绍主流的3个云计算平台,Azure, AWS和GCP。个人觉得AWS和GCP要相对好用一些,而Azure的验证过程有些复杂,用户体验较差,个人觉得使用性较低。
- AWS playground —— AWS入门
- Azure playground —— Azure入门
- GCP playground —— GCP入门
Project 1 —— Big Data Analytics
主要内容为利用AWS的平台进行一些初步的ETL(Extract, Transform and Load) 过程,其中主要涉及到了ET的过程。
- Sequential analysis —— 使用普通的洗数据的办法,只是平台变为了AWS的instance
- Parallel analysis —— 使用AWS提供的MapReduce服务。对2016年11月的Wikipedia的数据(128个G)进行清洗(利用MapReduce), 然后分析整个搜索动向,最后可以选择进行数据可视化
Project 2 —— Automating and autoscaling distributed services
这个部分的知识点主要是和运维相关的,主要涉及的是对instance的操作,不包括Autoscaling和使用docker等。
- Horizontal Scaling and Advanced Resource Scaling —— 主要学习的内容是根据访问的RPS,对我们instance的数量进行控制,当RPS较高的时候,增加instance的数量,反之则减少。平台的话使用得是AWS的平台
- Containers: Docker and Kubernetes —— 主要学习的内容是对Docker的了解,并根据自己的要求创建所需要的image。Kubernete这部分比较复杂,需要在三个不同的平台上创建instance,使用Kubernete进行跨平台的管理,并按照要求设计成为一个能够在线运行python代码和mysql代码也网页。
Project 3 —— Storage and DBs on the cloud
顾名思义,这一节的内容主要是介绍了几个在云计算中主要使用的数据库及其概念。三个主流数据库的使用练习:1. 关系型数据库 : MySQl, 2. 非关系型数据库 : MongoDB 以及 HBase。另外,这整个大项目的最后一个小项目还介绍了多线程概念以及练习
- Files v/s DataBases —— 包含了对Flat Files 的基本提取操作,包裹grep和awk等;以及使用JDBC(Java DataBase Connectivity) API对MySQL数据库进行各种操作;最后一个部分是利用JAVA对Hbase数据库进行一些基本的操作
- Social Networking Timeline with Heterogeneous Backends —— 这个项目的基本要求是建立一个社交网站,社交网站后台数据使用多种数据库。(MongoDb, Hbase, MySQL),并单独及复合的进行多种Query。对数据需要一些基本的ETL处理
- Multi-threading Programming and Consistency —— 这节的要求主要是学习多线程的处理,多线程中包含了几种多线程的情况,对这些情况都要求掌握。
Project 4 —— Parallel processing of large datasets
这一节的主要内容是介绍了几种处理大数据的工具,并提供了项目进行练习。 MapReduce, Spark, Kafka, Samza等的工具
- Multi-threading Programming and Consistency —— 介绍了使用replication 在distributed key-value stores中的作用,同时介绍了sharding的作用。并在这两种情况下,对数据进行修改的时候需要考虑的Consistency的问题。
- Iterative Processing with Spark —— 这节主要介绍了Spark的用法,并提供了相应的项目进行练习。如果之前没学过java8或者Scala,那么用Scala做Spark的时候还是很恶心的。这节项目的场景是用Spark实现实时的PageRank,算法并不复杂。
- Stream Processing with Kafka and Samza —— 这节主要内容是教会我们使用Kafka,项目背景是类似Uber打车的实时监控调度问题,问题比较有意思。毕竟最后一个Project,做的时候压力也不算大
Twitter Analytics Web Service —— High-performance multi-tier web service on the cloud
最后是Team的Project,折磨了所有人大概1个月,到Live Test之前基本大家都是要熬夜的,通宵也是蛮正常的。为了TeamProject都看了两次日出了
TeamProject 的前两个Phases, Phase1 和 Phase2都要求Hbase和MySQL同时使用,MySQL的RPS(Request Per Second)还是很容易达标的,但是对于负责Hbase的同学,压力还是蛮大的。
除了数据库的各种优化,TeamProject还需要对前端结构以及代码进行优化。
- Phase 1 —— 主要是使用Twitter中获得的数据,进行ETL之后,在数据库中进行各种Query。Twitter的数据大约1.4TB所有,如果ETL操作不对,由于Budget的预算问题,还是很紧张的。所以建议使用小号进行ETL,然后提交答案测试的时候再用小组的账户
- Phase 2 —— 加入了两个Query,并对Phase1的RPS提高了要求
- Phase 3 —— 加入最后一个Query,但只要求使用MySQL进行操作,因此难度不算太高。只是那个时候大家基本都在期末考的时间,各种其他课程的Projects,压力也还是蛮大的。
结语
总的来说这门课压力还是非常大的,每周一个Project,下面好多个小的要求。另外周五还需要花几个小时进行知识点的学习和一个Quiz需要完成。同时,当其中过后Team的Project开了之后,基本上熬夜就停不下来了。每周都在做CloudComputing的作业
课程个人认为还是一门非常好的课,可以总结为8个字:包罗万象,浅尝辄止。对于想要通过这门课达成专家级的成就,这门课远远是不够的。但是对于转专业的自己,这门课帮助是相当大的。当完成这门课之后,基本Linux和Shell的知识点可以达到一个不错的水平;MySQL及Hbase,MongoDB数据库的使用;Java 和 Python的熟练掌握;以及各种前端结构以及接口的掌握。还是算一门非常值得选的课程。
再次感谢周围的同学们,特别舍友对自己的帮助。最后这门课拿了A,虽然压力很大,不过结果还是很满意的。收获也是非常大的。