2017年6月19-20日,开源技术盛会LinuxCon + ContainerCon + CloudOpen(LC3)首次在中国举行。两天议程满满,包括 17 个主旨演讲、8 个分会场的 88 场技术报告和微软等公司的技术展览和动手实验。LinuxCon 吸引了众多国际国内互联网巨头、电信巨头和上千名业界人士参会,包括Linux创始人Linus Torvalds,大咖齐聚共同关注业界动态。

SDN/NFV:两大支柱构建未来网络

本次LC3 会议,探讨未来网络的构建,其中出现频率最高的关键词就是 SDN(软件定义网络)和NFV(网络功能虚拟化)。传统网络是个“黑盒子”,管理不够灵活,支持的网络规模不够大,网络状态的可见性和可调试性不足。随着云计算兴起的软件定义网络(SDN)和网络功能虚拟化(NFV)就致力于解决“黑盒”的问题。SDN 南向接口统一了纷杂的网络设备 API,北向接口则可以提供网络全局视图,方便集中运维。NFV 则是用软件来实现防火墙、负载均衡、虚拟网络隧道等网络功能(network function),使得网络功能更加灵活。

在会议上,云计算和5G 巨头纷纷指出使用 SDN 和 NFV 的新理由:异构网络需求的集中调度。不管是云服务,还是万物互联的 5G 电信网络,客户和应用的需求都千差万别,有的需要高带宽,有的需要低延迟,有的需要高稳定性。这就需要云计算平台和 5G 电信网络的基础架构能够在一张物理网络上支持多张虚拟网络,并为不同的虚拟网络提供不同的服务质量保证(QoS)。只有软件定义的网络管理、网络功能和网络调度才能灵活应对客户和应用的异构网络需求。

开放网络生态系统

随着SDN 和 NFV 在业界的广泛采用,生态和分享变得越来越重要,ONAP、ODL、OPNFV等网络管理、网络功能的开源项目受到众多企业关注。

快速增长的网络速度和Linux网络协议栈处理能力之间的差距日渐明显,Linux 网络协议栈也存在延迟的不稳定性,多个技术报告提到使用Intel DPDK、eBPF等技术提高数据平面的吞吐量和延迟稳定性。Open vSwitch开发组的报告中,特别提到用 P4 作为 CPU和可编程交换机上统一的SDN编程语言,减轻用C语言开发OVS功能的负担。DPDK开发组提出了基于fd.io的cryptodev框架,使用Intel QuickAssist等硬件加速设备加速数据包加解密,利用异步和向量包处理实现了单机40Gbps线速的IPSec网关。Azure云使用SR-IOV和FPGA加速,提供了单虚拟机25Gbps的网络吞吐量、比软件虚拟交换机低10倍的延迟。

大规模虚拟网络的SDN控制器性能是业界共同关注的话题。例如阿里云一个数据中心超过 10万台服务器,每秒上报一次heartbeat;如果数据中心断电后电力恢复,10万台交换机初始化配置需要多久;虚拟机迁移在不断发生,全部由SDN控制器处理负载过高。阿里云的解决方案是做配置缓存,每台服务器采用类似 ARP 的方式自学习网络配置,减轻SDN控制器的负载;使用UDP、定制高性能TCP协议栈来加速SDN控制器。

虚拟网络层次众多,需要抽象和封装才能让人理解

SDN控制器传统上是只负责config、provisioning,思科提出,还应该加入实时数据分析(例如硬件支持的数据包路径跟踪、统计和采样能力)、端到端的资源管理、基于身份的策略支持,使得开发者不必关心虚拟和物理网络的结构,而是可以直接指定应用的需求。阿里云也强调了虚拟网络的调试和运维能力,依赖SDN控制器实现了抓包的软件化、API化,即上层输入用户和虚拟机信息,下层自动对相关数据包进行染色和镜像。

软件定义的概念不仅在网络,在存储领域也得到了实践。华为的OpenSDS把传统管理员视角的命令行配置API改进成统一、简单、表意的YAML配置文件,把依赖存储专业知识的非自动化配置改进成基于策略的自动化业务编排,并允许应用在云平台上体现差异化的高级特性。

Microservices:开发和管理的最灵活选择

传统基于脚本的软件安装部署容易导致复杂的依赖问题和不一致的运行环境,现代服务应当拆分为多个微服务(microservice)的组合。以Docker为代表的容器(container)技术是微服务目前应用最广泛的载体。

Windows 支持的三种容器部署方式

容器是软件封装、部署、分发的一种工具。容器可以运行在Linux 内核命名空间里,可以运行在 CoreOS、Atomic等定制操作系统上,也可以运行在半虚拟化或全虚拟化的虚拟机里。Windows 系统也已经支持三种容器部署方式:基于 Linux 子系统的原生Linux 容器、基于Hyper-V虚拟机的 Linux 容器、基于 Hyper-V虚拟机的Windows容器。事实上,由于EPT、SR-IOV等硬件辅助虚拟化技术的成熟,基于虚拟机的容器带来的虚拟化开销是可以接受的,还提供了更好的隔离性。

虚拟机、容器、虚拟机内容器、Unikernel 的比较

除了容器,Unikernel也是部署微服务的一种高效方案。既然hypervisor已经提供了资源管理、调度和隔离,虚拟机里如果只运行一个任务,为什么还需要虚拟机里的内核呢?虚拟机里的应用可以直接通过一套library 访问 hypervisor。剑桥大学和Docker 社区联合开发的 MirageOS 就是用 OCaml编写的一套library OS,提供了clean-slate design的类型安全 API,支持 Xen、KVM 虚拟机和 x86、ARM 架构。对于较简单的微服务,Unikernel 更加高效;对于依赖关系较复杂的微服务,可以使用 LinuxKit 精简现有的容器。

容器技术栈

微服务带来的主要性能挑战是:微服务的粒度比传统的虚拟机小很多,容器的数量多、生命周期短。Red Hat 援引New Relic 的统计,46% 的容器只存活不到一个小时,25% 的容器甚至存活不到 5 分钟。Google 把绝大多数内部服务容器化、使用 Kubernetes 管理,每周需要新建 20 亿个容器,这意味着平均每秒新建 3000 多个容器,每个容器又需要 IP 地址,这对容器编排系统(orchestrator)和虚拟网络管理系统提出了可扩放性的挑战。此外,对于同样数量的物理服务器,容器的数量比虚拟机多一个数量级,给监控和日志分析带来了挑战。

将传统服务拆分为微服务、每个微服务部署为一台容器后,每台物理机上运行的容器数量多、容器间的通信频繁,容器的网络通信和容器之间的上下文切换都会成为性能瓶颈。Red Hat 提出了预创建容器的方法,维护一个容器池以分摊容器创建销毁的开销;在网络方面,容器间互联的overlay network需要用硬件加速MACVLAN、IPVLAN 等隧道协议和 IPSec、MACSec 等加密解密。在虚拟机网络中,通常使用 SR-IOV 把虚拟机暴露给物理网卡虚拟出的 VF 实现加速,然而容器的数量通常远远多于虚拟机,网卡无法虚拟出足够的 VF 给容器,而 Docker 默认使用的Linux bridge 吞吐量和延迟稳定性都不能满足要求,业界多使用 DPDK 等高性能数据平面来解决容器间的通信问题。

多种网络访问模型

容器中的应用程序访问网络的接口有DPDK、socket、定制协议栈等;容器间通信和汇聚的 overlay 层面有OVS、Linux bridge、SR-IOV 直通等;物理网卡的驱动程序又有多种。不同的网络访问模型在性能、灵活性、兼容性间有不同的折中,华为云网络实验室提出了 iCAN 容器网络框架,简化编程多种容器网络的数据通路、控制策略和服务质量要求,支持 flannel、OpenStack等多种容器网络编排器(orchestator)。

容器技术致力于微服务的可靠部署,从微服务源码到二进制的编译过程也是需要保证可靠性的,这就是可重现构建(reproducible build)。可重建构建采用输入校验和、有序编译过程、编译环境版本号一致、消除未初始化内存、伪装时间戳、清洗文件属性等技术保证生成的软件包是逐字节完全确定的。Debian 等发行版已经采用可重现构建技术。

GPU虚拟化:共享、安全、高效

LinusTorvalds(左)与Dirk Hohndel(右)进行访谈

Linux 和Git 的创始人、开源软件的精神领袖 Linus Torvalds 与VMWare VP Dirk Hohndel 的访谈是 LC3 大会的最大看点。Dirk 的一个问题是,如果你从今天开始,准备做什么项目。Linus 回答,他创造Linux 的时代,计算机硬件的编程比他童年时代变得容易了很多。Linus 自嘲自己不是一个硬件高手,因为总是把硬件弄坏。在今天,Linus 可能会考虑做 FPGA,如果对芯片设计感兴趣的话,因为 FPGA 的开发成本现在低了很多;或者 Raspberry Pi,可以做一些很酷的小东西。

在云和机器学习相结合的浪潮中,GPU 虚拟化和 GPU 容器的调度带来了新的技术挑战。GPU 可以通过 PCIepass-through 绑定到虚拟机内,Azure 等云服务就采用了这样的技术实现虚拟机的高效GPU 访问。当多个虚拟机需要共享 GPU 时,vSphere和 Xen 支持把一个物理 GPU 的核分割分配到多个虚拟机里,但是采用 hypervisor 虚拟设备转发的方式,性能较低。Intel的 GVT 和 NVIDIA的GPUvm 技术可以把一个GPU虚拟化成多个vGPU,vGPU 可以被分配到不同的虚拟机里,以实现物理 GPU 的空间多路复用。为了实现 GPU 的分时多路复用,Intel 提出了 GPU 命名空间和控制组,容器内核的显卡驱动把各个容器的计算任务按照优先级和时间片调度到GPU 执行。

Intel GVT-gGPU 虚拟化技术

GPU 虚拟化是为了复用 GPU 解决多个小型的计算问题(一虚多),而一些大规模的计算问题需要多个 GPU,这就需要调度互联的 GPU 虚拟机或容器(多虚一)。GPU 之间可以通过 NVLink、PCIe或者GPUDirect RDMA 通信,比通过CPU 的网络协议栈通信高效得多。随之而来的挑战,在虚拟网络环境下谁来给 GPUDirect RDMA 的数据包做隧道封装和访问控制;如何在虚拟机和容器的调度算法中体现 GPU 通信的需求。

微软:与开源共舞

 

Azure 支持的开源软件

云计算平台也正在打破公司的界限,拥抱开源和开放技术。微软在主旨演讲中提到,Azure 公有云平台中国区超过60% 的虚拟机运行 Linux,全球 30% 的虚拟机运行 Linux,这个比例还在逐年增加。Azure 云从操作系统、容器编排服务到数据库、编程语言、运维框架、应用程序都全面支持开源。之前只能运行在 Windows 上的SQL Server、PowerShell 等也支持 Linux了。与此同时,Windows 对开发者的友好程度也在与日俱增,例如 Linux 子系统使Linux 开发工具可以原生运行在 Windows 系统上、VisualStudio 与 Git 的集成、Hyper-V 对 Docker 容器的支持。

李博杰 个人介绍

 

李博杰,本科毕业于中国科学技术大学少年班学院,2014年加入中国科学技术大学与微软亚洲研究院的联合培养博士生项目,研究方向是数据中心网络和可重构硬件(FPGA)上的编程。

立即访问http://market.azure.cn

大会聚焦 | 开源技术盛会LinuxCon首次来到中国,大咖齐聚关注业界动态的更多相关文章

  1. droidcon 北京2016安卓技术大会——安卓领域国际盛会

    目前droidcon国际技术大会已成为安卓领域全球最有影响力.规模最大的技术大会,每年在世界各地举办,横跨四大洲,超过上万人次参加. droidcon国际技术大会于2009年由一个Android爱好者 ...

  2. Odoo Tech World 2018(上海)互联网开源技术大会通告

    会议概述 点击进入活动报名通道 高成本的软件开发,耗时的系统安装,繁琐的操作培训… 这一系列问题都是企业数字化管理的痛点, "软件"成为发展数企业数字化转型的瓶颈, 无论是小厂家或 ...

  3. 2016中国大数据技术大会( BDTC ) 共商大数据时代发展之计

    中国大数据技术大会(BDTC)的前身是Hadoop中国云计算大会(HadoopinChina,HiC).从2008年仅60余人参加的技术沙龙发展到当下数千人的技术盛宴,目前已成为国内最具影响力.规模最 ...

  4. 2018安卓巴士开发者大会打造Android技术盛宴

    2018安卓巴士开发者大会打造Android技术盛宴2018安卓巴士开发者大会将于8月25日在上海举行,作为中国最具前沿性.专业性的安卓技术会议,将邀请来自爱奇艺.阿里.饿了么等知名企业的一线工程师分 ...

  5. “开源、共享、创新” 2020 中国.NET开发者大会小结

    大会的新闻稿在2020年12月31日正式发布:开源·共享·创新|2020年中国.NET开发者大会圆满收官! , 本文是这篇新闻的补充性文章,仅代表个人对大会的各方面分享内容的一个小结. 在2019年上 ...

  6. MongoDB全球云端技术盛会MongoDB.live

    MongoDB全球云端技术盛会MongoDB.live,将于北京时间6月9日22:00正式开启,大会将以在线直播+按需学习相结合的方式,面向全球开发者.架构师等MongoDB 用户和爱好者免费开放,精 ...

  7. Apache DolphinScheduler&TiDB联合Meetup | 聚焦开源生态发展下的应用开发能力

    在软件开发领域有一个流行的原则:Don't Repeat Yourself(DRY),翻译过来就是:不要重复造轮子.而开源项目最基本的目的,其实就是为了不让大家重复造轮子. 尤其是在大数据这样一个高速 ...

  8. 社区活动分享PPT:使用微软开源技术开发微服务

    上周六在成都中生代技术社区线下活动进行了一个名为"微软爱开源-使用微软开源技术开发微服务"的技术分享. 也算是给很多不熟悉微软开源技术的朋友普及一下微软最近几年在开源方面所做的努力 ...

  9. Winjs – 微软开源技术发布的 JavaScript 组件集

    Winjs 是由微软开源技术的开发者推出的一组 JavaScript 组件,包括 ListView.ListView.Tooltip.DatePicker.Ratings 等等,帮助 Web 开发人员 ...

随机推荐

  1. centos7 install python3

    1. 过程 # 1. root权限, 安装依赖 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-dev ...

  2. asp.net mvc Model验证总结及常用正则表达式【转载】

    关于Model验证官方资料: http://msdn.microsoft.com/zh-cn/library/system.componentmodel.dataannotations.aspx AS ...

  3. Http协议-报文

    2013的双12即将到来,网上购物是大家所熟悉的.看中小米电视时,可以先下订单然后再付款,电商根据订单将小米电视正确安全的送达给我们.包裹包含电视的基本信息及电视的使用说明书,使我们能够初步的了解它的 ...

  4. (十四)hibernate逆向工程

    一.hibernate逆向工程生成实体 介绍一个模型设计工具PowerDesigner,这个是j2ee开发必要的一个工具.一般在开发中先使用PowerDesigner 创建实体关系图即概念模型.建立了 ...

  5. ASP.NET学习笔记(三)ASP Global.asa 文件

    Global.asa 文件 Global.asa 文件是一个可选的文件,它可包含可被 ASP 应用程序中每个页面访问的对象.变量以及方法的声明.所有合法的浏览器脚本都能在 Global.asa 中使用 ...

  6. Jmeter接口自动化参数化 (转自软件测试部落)

    测试场景: 有个查询城市(大概一百个 )天气预报的接口(需求参考第一课),需要根据不同的citycode,去查询对应城市的天气预报,这种接口该如何去测试呢? 分析需求: 不管是功能测试需求,还是接口测 ...

  7. nodejs ejs 引擎脱离express使用

    之前用ejs都是使用express创建项目,然后在app.js中配置好的ejs直接使用即可,但是最近项目中使用的手工路由模式,脱离了express,不知道怎么用了,去扒ejs的网站,各种资料,也是懵懵 ...

  8. IOS 打包提示错误(ERROR ITMS-90125: ERROR ITMS-90087: ERROR ITMS-90209:)

    提示这种错误是集成环信造成的,解决方法看环信的官方文档: 集成动态库上传AppStore 由于 iOS 编译的特殊性,为了方便开发者使用,我们将 i386 x86_64 armv7 arm64 几个平 ...

  9. Django模板语言,标签整理

    Django模板语言 标签 内置标签引用 1. autoescape 控制自动转义是否可用. 这种标签带有任何 on 或 off 作为参数的话,他将决定转义块内效果. 该标签会以一个endautoes ...

  10. ORA-06502 when awr report produce

    最近在生成一套系统的AWR报告时出现了如下报错:ORA-06502: PL/SQL: numeric or value error: character string buffer too small ...