编者按:随着微软的股价节节攀升,同时在最近的硬件大战中力克老对手苹果,大家熟知的那个微软又回到了大家的视野,本文给很多不熟悉微软开源技术的朋友普及一下微软最近几年在开源方面所做的努力和成效,毕竟很多人对微软的技术还停留在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