计算机热门研究领域扫盲

最近有幸得到了东南大学预推免的机会,之前凭借自己对行业的观察和直觉选择了数据科学方向,但发现自己甚至还没有对数据科学的一些基本了解
借此机会对当前计算机领域各个研究方向做一个全面的基础的了解,算是一个扫盲的过程。

云计算

云与云计算

计算机资源不在本地,通过网络使用其他设备的计算机资源(计算资源,网络资源,存储资源等)。

“云”实质上就是一个网络,狭义上讲,云计算就是一种提供资源的网络,使用者可以随时获取“云”上的资源,按需求量使用,并且可以看成是无限扩展的,只要按使用量付费就可以,“云”就像自来水厂一样,我们可以随时接水,并且不限量,按照自己家的用水量,付费给自来水厂就可以。
从广义上说,云计算是与信息技术、软件、互联网相关的一种服务,这种计算资源共享池叫做“云”,云计算把许多计算资源集合起来,通过软件实现自动化管理,只需要很少的人参与,就能让资源被快速提供。也就是说,计算能力作为一种商品,可以在互联网上流通,就像水、电、煤气一样,可以方便地取用,且价格较为低廉。
总之,云计算不是一种全新的网络技术,而是一种全新的网络应用概念,云计算的核心概念就是以互联网为中心,在网站上提供快速且安全的云计算服务与数据存储,让每一个使用互联网的人都可以使用网络上的庞大计算资源与数据中心。
云计算是继互联网、计算机后在信息时代有一种新的革新,云计算是信息时代的一个大飞跃,未来的时代可能是云计算的时代,虽然目前有关云计算的定义有很多,但总体上来说,云计算虽然有许多得含义,但概括来说,云计算的基本含义是一致的,即云计算具有很强的扩展性和需要性,可以为用户提供一种全新的体验,云计算的核心是可以将很多的计算机资源协调在一起,因此,使用户通过网络就可以获取到无限的资源,同时获取的资源不受时间和空间的限制。

虚拟化

目的是实现调度灵活。时间灵活性与空间灵活性。

相关技术

  • Hypervisor:完成物理资源虚拟化,如VMware,KVM
  • OpenStack:KVM这样的Hypervisor软件,实际上是提供了一种虚拟化能力,模拟CPU的运行,更为底层。但是它的用户交互并不良好,不方便使用。于是,为了更好地管理虚拟机,就需要OpenStack这样的云管理平台。(这些属于IaaS)
  • 容器:容器也是虚拟化,但是属于“轻量级”的虚拟化。它的目的和虚拟机一样,都是为了创造“隔离环境”。但是,它又和虚拟机有很大的不同——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。而大家常听说的Docker,就是创建容器的工具,是应用容器引擎。
  • K8S:除了Docker对容器进行创建之外,我们还需要一个工具,对容器进行编排。这个工具,就是K8S。K8S是一个容器集群管理系统,主要职责是容器编排(Container Orchestration)——启动容器,自动化部署、扩展和管理容器应用,还有回收容器。

私有云与公有云

公有云就是阿里云,腾讯云这些云服务商提供的服务。

私有云是企业或者个人自己拥有的云服务器,并且服务器不对外开放,仅供自己公司内部人使用。比如说有些大的企业数据文档需要共享,用云盘就很方便并且不用交给第三方保管,这从某种意义上来说降低了泄密的风险。另外,云服务器容错能力、抗风险能力都比较高,这是传统服务器所不能比的。
(私有云利用了云计算的特点,即资源不在本地,员工们随用随取)

另外还有混合云,主要由提供商管理的公共云与主要由客户业务管理的私有云之间的组合。这使得公司可以选择他们希望在内部保留哪些服务以及他们想要作为更通用(和通用)平台访问哪些服务,同时仍然将所有内容保留在云中。

IaaS、PaaS 和 SaaS

以阿里云为例,普通的ECS云服务器属于IaaS,但例如云数据库,云存储这样的云应用属于平台级的PaaS。另外例如阿里学生机提供的「轻量应用服务器」也可以认为是PaaS。(IaaS和PaaS的界限不明显)

如果你是一个网站站长,想要建立一个网站。不采用云服务,你所需要的投入大概是:买服务器,安装服务器软件,编写网站程序。现在你追随潮流,采用流行的云计算,如果你采用IaaS服务,那么意味着你就不用自己买服务器了,随便在哪家购买虚拟机,但是还是需要自己装服务器软件而如果你采用PaaS的服务,那么意味着你既不需要买服务器,也不需要自己装服务器软件,只需要自己开发网站程序如果你再进一步,购买某些在线论坛或者在线网店的服务,这意味着你也不用自己开发网站程序,只需要使用它们开发好的程序,而且他们会负责程序的升级、维护、增加服务器等,而你只需要专心运营即可,此即为SaaS。

Platform as a Service: 平台即服务, 是面向软件开发者的服务, 云计算平台提供硬件, OS, 编程语言, 开发库, 部署工具, 帮助软件开发者更快的开发软件服务. 比如Google的GAE.SaaS: 软件即服务, 是面向软件消费者的, 用户无需安装, 通过标准的Internet工具(比如浏览器), 即可使用云计算平台提供的软件, 比如Salesforce的CRM管理系统, Google的Gmail.还有IaaS 基础设施即服务, 这个跟PaaS的区别倒是不那么明显, 比如Amazon的IaaS服务AWS越来越像PaaS了。

总结

云计算面向用户隐藏了足够多的技术细节,我认为利用阿里云这些公有云厂商最大的好处一是弹性空间即买即用,二是省去了大量的运维工作。
云计算的研究应该还是侧重如何更好地进行资源调度,如何帮助用户进行资源迁移与部署。两个方面分别帮助云服务提供商和用户节省成本。

分布式系统

  • 什么是分布式系统,如何学习分布式系统
    分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

以一个请求为例串起分布式系统的技术细节

  用户使用Web、APP、SDK,通过HTTP、TCP连接到系统。在分布式系统中,为了高并发、高可用,一般都是多个节点提供相同的服务。那么,第一个问题就是具体选择哪个节点来提供服务,这个就是负载均衡(load balance)。负载均衡的思想很简单,但使用非常广泛,在分布式系统、大型网站的方方面面都有使用,或者说,只要涉及到多个节点提供同质的服务,就需要负载均衡。

  通过负载均衡找到一个节点,接下来就是真正处理用户的请求,请求有可能简单,也有可能很复杂。简单的请求,比如读取数据,那么很可能是有缓存的,即分布式缓存,如果缓存没有命中,那么需要去数据库拉取数据。对于复杂的请求,可能会调用到系统中其他的服务。

  承上,假设服务A需要调用服务B的服务,首先两个节点需要通信,网络通信都是建立在TCP/IP协议的基础上,但是,每个应用都手写socket是一件冗杂、低效的事情,因此需要应用层的封装,因此有了HTTP、FTP等各种应用层协议。当系统愈加复杂,提供大量的http接口也是一件困难的事情。因此,有了更进一步的抽象,那就是RPC(remote produce call),是的远程调用就跟本地过程调用一样方便,屏蔽了网络通信等诸多细节,增加新的接口也更加方便。

  一个请求可能包含诸多操作,即在服务A上做一些操作,然后在服务B上做另一些操作。比如简化版的网络购物,在订单服务上发货,在账户服务上扣款。这两个操作需要保证原子性,要么都成功,要么都不操作。这就涉及到分布式事务的问题,分布式事务是从应用层面保证一致性:某种守恒关系。

  上面说道一个请求包含多个操作,其实就是涉及到多个服务,分布式系统中有大量的服务,每个服务又是多个节点组成。那么一个服务怎么找到另一个服务(的某个节点呢)?通信是需要地址的,怎么获取这个地址,最简单的办法就是配置文件写死,或者写入到数据库,但这些方法在节点数据巨大、节点动态增删的时候都不大方便,这个时候就需要服务注册与发现:提供服务的节点向一个协调中心注册自己的地址,使用服务的节点去协调中心拉取地址。

  从上可以看见,协调中心提供了中心化的服务:以一组节点提供类似单点的服务,使用非常广泛,比如命令服务、分布式锁。协调中心最出名的就是chubby,zookeeper。

  回到用户请求这个点,请求操作会产生一些数据、日志,通常为信息,其他一些系统可能会对这些消息感兴趣,比如个性化推荐、监控等,这里就抽象出了两个概念,消息的生产者与消费者。那么生产者怎么讲消息发送给消费者呢,RPC并不是一个很好的选择,因为RPC肯定得指定消息发给谁,但实际的情况是生产者并不清楚、也不关心谁会消费这个消息,这个时候消息队列就出马了。简单来说,生产者只用往消息队列里面发就行了,队列会将消息按主题(topic)分发给关注这个主题的消费者。消息队列起到了异步处理、应用解耦的作用。

  上面提到,用户操作会产生一些数据,这些数据忠实记录了用户的操作习惯、喜好,是各行各业最宝贵的财富。比如各种推荐、广告投放、自动识别。这就催生了分布式计算平台,比如Hadoop,Storm等,用来处理这些海量的数据。

  最后,用户的操作完成之后,用户的数据需要持久化,但数据量很大,大到按个节点无法存储,那么这个时候就需要分布式存储:将数据进行划分放在不同的节点上,同时,为了防止数据的丢失,每一份数据会保存多分。传统的关系型数据库是单点存储,为了在应用层透明的情况下分库分表,会引用额外的代理层。而对于NoSql,一般天然支持分布式。

REST与RPC

  • 面试问题:REST与RPC区别?
    REST调用及测试都很方便,RPC就显得有点繁琐,但是RPC的效率是毋庸置疑的,所以建议在多系统之间的内部调用采用RPC。
    对外提供的服务,Rest更加合适。

数据科学

大数据

看了一圈之后发现其实目前的这些热门方向可以连在一起形成一个闭环。

ETL程序

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。

物联网

边缘计算

其他

看完之后依旧头大,还没完全清楚自己感兴趣的方向。另外一个感觉就是这些名词总是在把简单问题复杂化,接下来的这些天再继续了解。

从招聘入手

突发奇想想看看大厂们的招聘都在招什么岗位

  • 阿里巴巴校园招聘岗位

  • 算法工程师

    • 语音对话交互:深度学习、语音识别、语音合成、自然语言处理、语音交互、人工智能
    • 运筹优化:机器学习、运筹学(电商,物流和计算资源调度)
    • 自然语言处理
    • 计算机图形
    • 计算机视觉
    • 机器学习
  • 数据研发工程师
    • 大数据的采集、存储、处理,通过分布式大数据平台加工数据,支持业务管理决策
    • 大数据体系的设计、开发、维护,通过数据仓库、元数据、质量体系有效的管理和组织几百P的数据
    • 大数据产品的研发,通过对数据的理解,发挥你的商业sense,发掘数据价值,探索大数据商业化
  • 研发工程师
    • 基础技术(基础软件的设计、开发和维护)
    • 高性能分布式技术
    • 搜索技术
    • 电子商务产品技术
    • 海量数据处理和开发
    • 客户端开发
  • 基础平台研发工程师(全栈)
    • 云基础设施技术
    • 虚拟化技术
    • MySQL、PostgrelSQL、MongoDB、Redis、HBase等开源数据库内核的改进
    • 分布式系统
    • 大数据在线引擎体系

SEU

根据SEU计算机学院的导师方向对目前计算机科学的研究领域做一个分类

  • 网络计算
  • 数据科学
  • 机器学习与知识工程
  • 智能系统与应用
  • 计算机软件与理论
  • 影响科学与图像处理

总体来说,交叉技术运用的越来越明显,人工智能,网络,软件理论是几个主要的研究方向。

最后放一张闲来无事做的SEU计算机学院导师们研究方向的词云。