编者按:随着微软的股价节节攀升,同时在最近的硬件大战中力克老对手苹果,大家熟知的那个微软又回到了大家的视野,本文给很多不熟悉微软开源技术的朋友普及一下微软最近几年在开源方面所做的努力和成效,毕竟很多人对微软的技术还停留在10年前的认知上,自从微软新CEO上任后,进行了一系列的大刀阔斧的改革,其中拥抱Linux是浓墨重彩的一笔。本文选自于启路CTO朱永光大神在中生代十月十城成都的分享,朱老师在讲解干货的同时,也不忘现场写代码演示如何搭建简单的Hello World,欢迎大家观看视频!
过去几年中微软在开源方面做了很多努力,这些努力目前已经出具成效,在前不久GitHub发布的开源报告中,微软已经成为一家重要的开源技术公司。本分享将从工具、运行时和基础设施三个角度来解析微软开源的策略和发展。并以微服务的开发为例,来演示微软开源工具、运行时和基础设施的使用,以此展示微软开源技术被选型和应用的可能性。
下面是朱老师现场的分享视频:https://v.qq.com/iframe/preview.html?vid=y03376jx05x&
带大家走马观花看一下微软的开源技术,如果大家感兴趣的话,我后面的线下活动再针对某些主题进行深入分享,希望做成一个专题。然后现场演示一个helloworld难度的示例,让大家看看如果使用微软开源技术。为了体现微软技术的跨平台的真实性,我没有使用我的Surface,而是特意带上了不常用的Macbook Air。
分享内容
“走马观花”
“Hello World”
问答
Linux是威胁微软知识产权的‘毒瘤’
——2001年,史蒂夫﹒鲍尔默的著名言论
2014年的一次技术会议上,现任微软CEO萨蒂亚·纳德拉宣称。由此可以看出微软的巨大转变,虽然这个转变有点晚了,但是晚总比没有好。
微软在git上开源的地址
C#
C#虽然没有打上开源标签,但是标准开放ECMA,且编译器开源
一段代码了解所有C# 7新特性:https://blogs.msdn.microsoft.com/visualstudio/2016/08/30/new-c-7-0-features-in-vs15-preview-4
F#是2005年底就开始开源的微软首要编程语言 ,口号是让用户和组织使用简单、可维护和健壮的代码来处理复杂的计算问题。
TypeScript
类型化的JavaScript超集,编译为标准JavaScript
直接使用ECMAScript 2015及其未来特性
2.0已经正式发布: http://www.infoq.com/cn/news/2016/09/typescript-release-20
是很多项目的开发语言:VisualStudio Code、Angular2、仙鹤引擎,Azure Portal
被多种工具支持:VS 2015/2013、VSC、WebStorm、Eclipse、Sublime
R语言
2014年底收购R开发商Revolution Analytics,继续推出开源发行版本Microsoft R Open
集成到SQL Server 2016中提供R Services
Visual Studio Code
Erich Gamma领导的GitHub明星项目:18477,Fork2539
重新定义代码编辑器:多语言支持、智能感知、调试支持、内置Git、丰富扩展、控制台集成……
Visual Studio Code的幕后英雄
开源浏览器编辑器:monaco-editor,还用于Azure、VSTS、OneDrive、Edge和你自己的产品
基于大量开源产品:Electron、Node和TypeScript,N多前端工具
语言和调试支持:
C#:Roslyn和OmniSharp
Java:javac或java-language-server(by RedHat)
TypeScript/JavaScript:TS/JS Server
Go:Go CLI Tools
Python:Jedi
java-language-server是Redhat维护的,实现了一个开发协议Language Server Protocol,这个协议也被用于Eclipse Che中。
MonoDevelop
针对.NET/Mono开发人员的跨平台、全功能的IDE
Xamarin Studio的基础
MSBuild
Microsoft Build Engine,一个构建应用程序的平台(类似Ant、Maven),目前主要用于Visual Studio,随着开源会用于VSC和MonoDevelop中,甚至JetBrain的产品中
提供了.NET Core版本实现了跨平台
开源的目的是为了未来统一.NET Core和.NET Framework的项目格式
有意思的是,MSBuild的CI系统是托管在Azure上的Jenkins,其实大部分微软的开源项目都使用此CI平台,如:JetBrain的C# IDE Rider
XXX Tools for VS
Node.js Tools for Visual Studio
Python Tools for Visual Studio
R Tools for Visual Studio
ASP.NET 4 Stack
微软大规模开源的试点项目,托管在CodePlex
可以通过Mono实现跨平台运行
MVC 5.x、Web API 2.x、Web Pages 3.x、SignalR 1.x
当然还有OWIN和Katana
Mono/Xamarin
Mono,一个.NET开源实现(之前非官方,现在算是半官方),实现了.NET Framework的大部分内容(也有自己的扩展)
在.NET Core之前,已经可以通过Mono在Linux上完美运行ASP.NET应用
Mono将会逐步吸收.NET Core的FX代码
Xamarin,基于Mono的移动开发框架,Xamarin SDK开源
使用熟悉的IDE和语言,共享众多的函数库
原生的用户界面、原生的API访问、原生的性能
包括:Xamarin.iOS(AOT)、Xamarin.Android(JIT)
Xamarin.Forms,使用XAML构建多平台UI
.NET Core
.NET Framework的一次重生,微软开源策略的核心和支点
定位:Web应用程序和服务
跨平台:Windows、Linux(主要发行版本)、Mac和Docker
统一:利用.NET Standard函数库实现多个运行时的统一
快速:Node.js 8倍,Go 3倍
轻量级:模块化开发和部署
现代语言支持:C#、VB和F#
开源:运行时CoreCLR、函数库CoreFX、编译器Roslyn、语言、工具CLI和ASP.NET Core都在GitHub上
这是微软未来开源技术和平台的支点
ASP.NET Core
ASP.NET的完全重写,可以运行在.NET Core和.NET Framework
把MVC和Web API合二为一,特性比ASP.NET 4有所加强
基于libuv实现跨平台KestrelHttpServer
模块化、内置依赖注入、可集成任意前端框架
依然可以使用OWIN组件
libuv is a multi-platform support library with a focus on asynchronous I/O.
第三方对.NET Core和ASP.NET Core的支持
gRPC、protobuf、NancyFx……
IBMBluemix
AWS Elastic Beanstalk
Google Cloud Platform
EnitityFramework 6.x/EF Core
微软官方的ORM
Entity Framework 6.x也是开源的,通过Mono实现跨平台
EF Core不是6的升级而是重写,更加轻量级更易扩展
EF Core内置支持SQL Server和SQLite,以及用于测试目的的内存数据库
当然第三方已经提供对MySQL等数据库的支持
Pomelo.EntityFrameworkCore.MySql
Orleans
不用学习和应用复杂并发或其他缩放模式,构建分布式、高伸缩应用程序的一种直接方式
微软研究院出品,实现Virtual Actor Model,官方版的Actor框架
被Azure和很多微软或第三方产品使用:
Halo 4和Halo 5的游戏后端
Computational Network Toolkit
Production-quality, Open Source, Multi-machine, Multi-GPU,
Highly efficient RNN training,
Speech, Image, Text
深度学习网络计算框架,微软认知服务背后的计算核心
OSS on Azure
常见的Linux发行版本镜像已经在Azure上提供
Azure中国版运行的VM超过一半是Linux
MySQL、Hadoop、Spark、HBase、Storm、Redis、Docker、Mesos、Marathon、Kubernetes
Cloud Foundry 8月份在Azure中国版发布
App Service支持.NET、NodeJS、PHP、Python或 Java
Docker VM Extension,Docker Service Cluster
SQL Server on Linux
没有什么好说了
关于原因大家可以看我这位朋友的分析:http://www.cnblogs.com/lyhabc/p/5255763.html
Ubuntu on Windows
Bash on Ubuntu on Windows
提供一个原生运行的命令行工具方便开发人员在Windows上开发Linux的程序
Windows 10周年更+开发人员模式
Windows is running Ubuntu user-mode binaries provided by Canonical. This means the command-line utilities are the same as those that run within a native Ubuntu environment.
Docker on Windows
和Docker Inc.合作,把命令行工具带到Windows
Docker发行了Docker for Windows
跑在Hyper-V中的MobyLinux作为Host OS
微软在Windows 10周年更和Windows Server 2016提供了容器功能(抽象层),并基于Docker作为实现
兼容Docker的一切(CLI、Hub、Registry、Dockerfile等)
Windows Server 容器 vs Hyper-V 容器
Nano Server vs Windows Server Core
PowerShell
移植到.NET Core,支持跨平台
口号是:PowerShell for every system
8月份开源,现在5286
基于.NETCore构建微服务
技术总是要落地,要为业务服务才有价值。我个人认为落地.NET Core的一个很好的地方就是开放服务端的微服务,或者前端Web应用程序。
为什么选择微服务?
.NET Core的定位决定了它更适合开发服务端
微服务的特点让.NET Core的试用成本更低
主要好处之一:技术异构性。微服务可以帮助我们更快地采用新技术。——《微服务设计》
.NET Core能很好的适应——微服务的主要托管环境——容器。
基于.NET Core开发微服务的图书
Microservices in .NET Core:https://www.manning.com/books/microservices-in-net-core
Building Microservices with ASP.NET Core——Develop, Test, and Deploy Cross-Platform Services in the Cloud:http://shop.oreilly.com/product/0636920052074.do
微服务多小算小?
微服务->实现单一功能->满足某个业务
领域驱动设计->基于聚合来切分业务领域
一个微服务==一个聚合
撸码ing
技术栈:
.NET Core
NancyFx
Visual Studio Code
Docker
源代码:
https://github.com/heavenwing/WeatherMicroservice
微服务应用平台
Docker Swarm and Docker Compose
Kubernetes
Mesosphere DCOS, with Apache Mesosand Marathon
OpenShift
Pivotal Cloud Foundry
Service Fabric
Microsoft and Mesosphere have partnered to bring open source components of the Mesosphere Datacenter Operating System (DCOS), including Apache Mesos and Marathon, to Azure. The Mesosphere DCOS, powered by Mesos, is a scalable cluster manager that includes Mesosphere’s Marathon, a production-grade container orchestration tool. It is available as part of the Azure Container Service.
Service Fabric powers many of our hyper-scale cloud services, including SQL DB, DocDB, Intune, Cortana and Skype for Business, as well as many internal Azure infrastructure services.
Service Fabric has built-in support for lifecycle management, hybrid deployments, and 24x7 availability Service Fabric supports both
stateless and stateful microservices with leadership election to support data consistency and a state replication framework that supports transactions for stateful data guarantees.
CI/CD
http://devopshub.cn/
使用VSTS/TFS搭建基于容器的持续交付管道
参考资料:
http://www.cnblogs.com/shanyou/p/5915056.html
http://www.infoq.com/cn/news/2016/04/Microsoft-Linux-strategy
http://www.infoq.com/cn/news/2016/06/NET-Core-1-0-publish
https://docs.microsoft.com/en-us/dotnet/articles/csharp/tutorials/microservices
https://github.com/NancyFx/Nancy/tree/master/samples/Nancy.Demo.Hosting.Kestrel
https://docs.microsoft.com/zh-cn/dotnet/articles/core/docker/building-net-docker-images
https://docs.microsoft.com/en-us/dotnet/articles/csharp/tutorials/microservices
https://azure.microsoft.com/zh-cn/documentation/articles/service-fabric-overview/
https://azure.microsoft.com/zh-cn/blog/microservices-an-application-revolution-powered-by-the-cloud/
https://docs.microsoft.com/zh-cn/dotnet/articles/core/deploying/index
分享者简介:
朱永光,微软10届最有价值专家MVP(.NET方向)。有20年的编程经验,擅长微软相关技术和产品;对各种前沿技术抱有极大兴趣,对开发框架、软件架构、编程语言和敏捷开发有深入研究;推崇多语言编程,异构系统架构。个人技术博客:http://redmoon.cnblogs.com。
本文转载自微信公众号 中生代技术 freshmanTechnology