写点什么

Helios:一个基于 OWIN 的运行于 IIS 上的 ASP.NET Web 托管框架

2014 年 3 月 28 日

微软发布了 Helios 项目,一个轻量级的基于 OWIN 的运行于 IIS 上的 Web 托管框架。

Helios 是微软继 Katana 之后,于去年夏天发布的另一个项目,通过提供一些可独立安装、使用和管理的,运行于实现了OWIN 规范的Web 托管服务的小组件,让.NET Web 开发者可以绕开ASP.NET/IIS 这个庞然大物。

ASP.NET 的弊病之一是包含在.NET Framework 中,与.NET 的发布周期捆绑在一起。后者几年才会发布一个主版本,并且受制于特定的测试和缺陷修复的过程。为了让 Web 工具的开发更加敏捷且更具响应性,ASP.NET 团队创建了大量略小的组件——ASP.NET MVC、ASP.NET Web API——它们不依赖于 System.Web.dll,具有更加快速的开发周期,能够及时地修复缺陷。不仅如此,开发者还能将这样的 Web 应用程序部署在自定义的 OWIN 托管服务或 Katana(一个参考的 OWIN 实现)上。

Helios 是一个运行于 IIS 上的 Web 运行时,但并不是完全成熟的微软 Web 服务器, Rick Strahl 解释道

Helios 不使用 System.Web.dll,它直接挂(hook)到 IIS 的原生接口上,提供基本的 OWIN 接口和上下文语义。它完全运行于普通的 ASP.NET Http 运行时环境之外,绕开模块管道和默认的 ASP.NET 运行时处理……Helios 是引导自原生 IIS 的、轻量级短路版本的 Web 托管服务。请记住,尽管 IIS 和 ASP.NET 联系得十分紧密,但 IIS 内核本身是十分轻量的,并且完全运行于原生代码之上。只有在安装了 ASP.NET 模块或处理程序之后,才会与 ASP.NET 产生交互,并且这种交互与原生内核和原生模块比起来是相当慢的。

Helios 背后的理念是,基于 IIS 的成熟且功能丰富的环境(不包括遗留的 ASP.NET 附件),提供一个运行时。此外,如 ASP.NET 的安全工程师 Levi Broderick 所说,其目标是提供“高密度的 Web 服务器”,“模拟自托管多于模拟 Web 托管的行为”,以及“减少部署 Web 应用时的麻烦”。但是,它不会“对现有应用 100% 的兼容。特别是不支持.aspx 和.ashx 或其他 ASP.NET 相关的终结点”。

在开发时,Helios 要求以下环境:Windows 8 或 Windows Server 2012,.NET Framework 4.5.1,Visual Studio 2012 或 2013。Broderick 表示他们会在“未来的某个预览版中放宽这一要求”,可能会允许开发者使用 Windows 7 进行开发。Helios 应用程序可以部署在 Windows Azure 或任何拥有 Windows Server 2012、.NET Framework 4.5.1 且完全信任的托管环境中。

在性能方面,对于一个“Hello World”应用来说,Helios 的吞吐量比标准 ASP.NET 多 2-3 倍。但 Broderick 认为这并不能作为比较两种 Web 解决方案的基础,因为实际的应用程序要远比介绍性的应用复杂得多。但在内存占用方面, Helios 要比 System.Web 表现优秀

在绝对数字方面来看,示例应用在 Helios 架构下可以达到 50000 个并发请求,与标准 ASP.NET 管道相比,能节省大约 1GB 的内存占用。由于示例应用设计时采用的是最小基线,因此我们有理由相信在其他复杂应用中,也能保持这个绝对数字。

需要注意的是,Broderick 在评论里提到,微软还没有提交 Helios:

如果人们实际上不需要 Helios,或者团队解散,或者有更好的想法,或者有其他想都想不到的各种理由,我们都可能停止工作并且不会发布它。我们可不想让它只能在 Azure 下工作。

开发者在安装了 Microsoft.Owin.Host.IIS 的 NuGet 包之后,就可以直接在 Visual Studio 里创建基于 Helios 的 ASP.NET 应用程序了。

原文英文链接: Project Helios: An ASP.NET OWIN-based Web Host Running on IIS

2014 年 3 月 28 日 20:499240
用户头像

发布了 59 篇内容, 共 18.6 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

UML学习笔记

Edison

UML

架构师训练营第 3 周作业

netspecial

极客大学架构师训练营

go语言设计的理解-工程化语言

superman

Java go 面向对象编程

一个草根的日常杂碎(10月1日)

刘新吾

随笔杂谈 生活记录 社会百态

区块链到底是什么?它为什么如此受人关注

CECBC区块链专委会

区块链 金融

架构师训练营 1 期第 3 周:代码重构 - 总结

piercebn

极客大学架构师训练营

AQS 都看完了,Condition 原理可不能少!

程序员小航

Java 源码 源码阅读 JUC Condition

架构师训练营—第三周作业

Geek_shu1988

极客时间 - 架构师一期 - 第三周作业

_

极客大学架构师训练营 第三周

架构师训练营 - 第三周总结

一个节点

极客大学架构师训练营

架构师训练营第 1 期 - 第三周课后练习

Anyou Liu

极客大学架构师训练营

智能的本质—DIKW结构

良少

学习 AI 智能 DIKW

互联网上正规平台的辨别方法?被AG黑网投黑钱拿回的技巧方案

InfoQ_6b6a6317a692

最完整的PyTorch数据科学家指南(1)

计算机与AI

学习 PyTorch

架构师训练营 - 第三周作业

一个节点

极客大学架构师训练营

架构师训练营第三周学习总结

吴传禹

极客大学架构师训练营

LeetCode题解:242. 有效的字母异位词,哈希表一次循环,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

LeetCode题解:242. 有效的字母异位词,哈希表两次循环,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师训练营第一期 - 第三周课后 - 作业一

极客大学架构师训练营

区块链12年:应用在了哪些领域?

CECBC区块链专委会

区块链 教育 金融 物流

为什么go中的receiver name不推荐使用this或者self

Gopher指北

go 后端

架构师训练营—第三周学习总结

Geek_shu1988

架构师训练营第三周作业

吴传禹

极客大学架构师训练营

架构师训练营第一期 - 第三周课后 - 作业二

极客大学架构师训练营

【读书笔记二】《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 分布式 研发管理

spring-boot-route(一)Controller接收参数的几种方式

Java旅途

Java Spring Boot

架構師訓練營第 1 期 - 第 02 周總結

Panda

架構師訓練營第 1 期

如何理解区块链行业的安全问题?

CECBC区块链专委会

区块链 人工智能 大数据

为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?

冰河

springboot LocalDateTime JsonFormat

第三周用组合设计模式编写程序

Geek_fabd84

Ui Automator 框架和Ui Automator Viewer你会用吗?附送「必备adb命令」拿走不谢 !

清菡

android

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

Helios:一个基于OWIN的运行于IIS上的ASP.NET Web托管框架-InfoQ