焦虑使人进步.
本科毕业设计时接触过 Hadoop,Hbase, 后来从事嵌入式行业, 浅尝辄止.
后来炒的非常火的物联网也好, 人工智能也好, 云计算都是关键的技术支撑之一.
软件行业, 没有 "稳定的工作" 这个说法, 所以对这种通用的技术和框架还是要保持关注.
跟进一门技术, 最好的方法是看下当前市面上的需求是哪些.
随后从一些招聘帖收集部分信息如下:
大规模高性能并发系统设计, 开发, 运维经验. 熟悉消息队列(Kafka/RabbitMQ 等), 缓存(Memcache/Redis 等), 关系性数据库(Oracle/MySQL 等), 能够设计复杂业务, 高并发, 大数据量的系统;
有实时大数据处理经验, 熟悉 Hadoop/Map-Reduce/Storm/Spark/Flink 等分布式计算框架优先考虑
spring 相关框架体系, 熟悉 spring boot 快速开发机制, 熟悉 spring cloud 体系并且对 spring 源码有研究者优先;
分布式软件的设计和运行原理, 熟悉 ZooKeeper,Redis,Kafka, NoSQL 等相关开源软件的使用和开发.
分布式软件架构设计, 如: 微服务架构, 分布式事务和数据一致性设计等
熟悉 RestFul, 微服务等软件架构风格和理论, 有海量节点管理 / 调度系统设计, 开发经验者优先;
了解虚拟化和容器技术, 熟悉 k8s/mesos/docker/OpenStack 等系统;
了解数据中心规划, 网络架构, 服务器部署等基础设施架构, 熟悉离线计算, 实时计算, 流计算模型;
精通 Python/Java/Go/C 其中之一, 编码风格良好
结合云计算的三个层次, 再加上如上列举的各种技术点, 做一个整理如下.
IaaS,PaaS,SaaS 简介
IaaS 层相关技术和概念
1. 虚拟化
通过某种方式, 隐藏底层物理硬件的过程, 使得多个操作系统能透明的共享和使用这部分资源.
服务器绝大部分时间, 都是处于 "休眠", 只有 5% 的左右的时间工作, 虚拟化的优点在于可以减少服务器的数量, 对企业来将, 其实就是开发减少不动资产, 能耗, 冷却和管理成本;
举例来讲就是:
a 公司服务器设施必须要满足自身业务量的峰值, b 公司也一样, 峰值不是经常有的, 并且大家的峰值可以错开, 那就可以维护一套硬件设施来满足多个用户的使用, 对于 a,b 公司来讲, 本身的成本是降低的, 他们再满足自身业务的同时, 无需担心为那些大多数时间上闲置的资产去开销成本.
2.hypervisor(虚拟管理程序或 VMM)
架构上提供虚拟化的层, 具体分为两类:
a. 直接运行在物理硬件上, 基于内核实现的虚拟机, 比如 KVM
b. 运行在一个操作系统内的, 比如 QMEU,WINE
具体的实现有: Xen,Oracle VM,VirtualBox,KVM,VMware ESX/ESXi 等
3. 相关技术点
通过 Open Stack,Open Nebula,Apache Cloudstack 等软件平台, 利用现有的 KVM 等 hypervisor 实现虚拟化, 同时支持对计算资源, 网络资源, 存储资源的抽象和管理, 也支持对安全相关的 API 接口, 提供命令行等服务.
PaaS 层相关技术和概念
1. 概念
摘自 wiki 上对 PaaS 的解释:
PaaS 属于云计算服务的一类, 它提供一种平台, 使得用户可以在其上实现对应用的开发, 运行和管理, 同时不需要考虑复杂的构建, 配置和维护相关配套的开发环境. 主要分为两类:
以虚拟机为基础的, 代表为 AWS 的 Beanstalk;
以容器为基础的, 代表为 GAE,CloudFoundry,Heroku;
经济性上容器比虚拟机占绝对优势, 性能上容器技术也会好一些; 但是在安全和隔离方面, 虚拟机远远好于容器.
2. 架构模式(摘自 https://yq.aliyun.com/articles/68828)
路由模块: 该模块的基本功能是将终端用户请求路由到对应的服务器实例, 并提供应用动态注册等功能. 目前绝大多数的实现是基于 ngnix, 同时也需要使用简单的 lua 脚本完成应用注册和路由查询等基本功能;
服务管理模块: 该模块会为开发人员和运维人员提供管理接口, 其基本功能包括创建应用实例, 配置应用运行参数, 启停应用, 发布应用程序, 扩容或缩容等. 服务管理模块也需要提供相应的客户端被用户使用, 如命令行或是用户界面等;
应用容器模块: 应用容器是 PaaS 平台的核心, 其主要功能是管理应用实例的生命周期, 汇报应用的运行状态等. 目前来看, 应用容器可以基于虚拟机来实现(如 AWS), 也可以使用 Linux 容器技术来实现, 最早使用的是 LXC,CloudFoundry 使用的是自己的 warden, 同样也是基于 cgroup, 现在最新的是 docker;
应用部署模块: 应用部署模块需要将应用程序打包成为可直接部署的发布包. 该模块是实现 PaaS 平台开发性的关键. 由于现有通用的 PaaS 平台需要支持多种编程语言和框架, 如 Java, Python, Ruby 和 PHP 等, 当应用发布时, PaaS 平台需要根据不同的编程语言将应用打包成为通用的发布包, 然后传递给容器模块部署. 应用部署模块是实现这一过程的关键, 目前来看起源于 Heroku 的 buildpack 已经被大家广发接受;
块存储模块: 该模块主要用于存储应用的发布包, 需要保证程序包的长久存储和. 目前 AWS 的 Beanstalk 直接使用 S3,CF 可以使用网络文件系统 NFS 或是其他任何分布式文件存储系统(如 HBase);
数据存储模块: 该模块需要保存应用和服务的基本信息, 可以基于任何现有的数据库技术实现, 如 MySQL 或是 MongoDB 等;
监控模块: 该模块的作用是持续监控应用的运行状态, 比如健康状态 (是否存活), 资源使用率(CPU, 内存, 硬盘, 网络等) 和可用性等. 这些指标会成为整个 PaaS 平台运维的关键, 也为自动弹性伸缩奠定基础;
用户认证模块: 该模块需要保证应用程序的安全性和隔离性, 通常而言, 公有云的提供商会使用 OAuth 等技术集成现有的用户认证服务;
消息总线模块: 该模块也是最重要的模块, 由于 PaaS 平台所搭建的是一个大规模分布式环境, 通常而言, 规模在数百台到上千台的机器数量, 所有模块之间的通讯会变成一个核心的问题. 所以消息总线会变成系统之间通讯的基础, 通常需要支持 pub/sub 模式.
基于该架构, 应用实例的弹性伸缩也能够非常容易的实现. 首先需要监控服务来不断获取实时的应用状态, 当某些指标超出预先定义的阈值时, 平台会启动伸缩服务, 首先从应用容器模块预留资源, 然后调用应用部署模块打包应用并部署, 最后将应用节点注册到路由模块完成整个伸缩的过程
3. 相关技术点
AUFS 技术:
一种 union file system,UnionFS 主要特点是, 将不同的物理位置合并 mount 到同一个目录中. 比如将只读的 CD/DVD 和硬盘目录联合挂载到一个目录上, 你就可以对 CD/DVD 上的文件进行修改, 修改结果会存于硬盘上的目录中.
这篇文章中有详细的例子: https://www.open-open.com/lib/view/open1440483391763.html
Docker:
利用 AUFS 技术第一次将容器实例镜像化, 这一突破性的创新能够让容器实例可以复制, 可迁移, 可重用. 彻底打破了以前只有使用虚拟机才能迁移实例的局限性.
粗浅的理解, docker 将常用的依赖资源, 比如 OS,lib, 基础组件等打包作为一个整体镜像, 统一配置到容器的根目录下, 然后 docker 利用了 layer 的概念, 形成了一种增量的 rootfs, 镜像的每次都会生成一个 layer, 再通过 UnionFS 联合挂载的方式, 不同应用将通过各自所在容器, 选择性的对各个 layer 进行引用, 就完成了实例的复用.
SaaS 层相关技术和概念
1. 概念
软件及服务, 更像是一种商业模式, 而非一种技术框架.
用户不断的付费, 然后获得持续性的软件服务, 客户端非常轻量级, 无需配置, 管理和维护这些软件资源;
依据 "可配置, 高性能, 可伸缩", 可以将 SaaS 划分为 四级成熟度模型.
2. 相关技术点
MDA(model driven architecture):
模型驱动架构, 用来实现 "可配置化" 常用架构. 架构模型图如下:
其余技术点补充
RestFul(representational state transfer, 表现层状态转化)软件架构
网站也是一种软件, 是一种采用 C/S 模式, 分布式部署, 通过互联网通信交互点一种互联网软件.
符合 REST 原则的互联网软件, 就可以叫 RestFul 风格的软件.
REST 原则具体有以下几点:
a. 每一个 URI 表示一种资源
b. 客户端和服务器之间, 传递资源的某种表现层
c. 客户端通过 POST,GET,PUT,DELETE 四种方式来操作服务端资源, 实现表现状态转化
这个框架里面, 核心的东西, 在于界定和抽象 "表现状态", 资源的不同版本, 不同展现形式等都可以抽象为表现状态.
有一篇文章讲的很好, 可以参考: http://www.ruanyifeng.com/blog/2011/09/restful.html
Spring MVC
一个开源的 java 平台, MVC 即 model,view,controller; 用于开发灵活和松散耦合的 web 应用程序.
分布式消息队列
分布式系统重要组件, 主要应用在解决应用耦合, 实现异步消息, 处理流量削峰, 实现消息通讯四个场景.
目前使用较多的有 Kafka,RabbitMQ,ActiveMQ,ZeroMQ 等.
来源: http://www.bubuko.com/infodetail-2980036.html