使用Netty和阿里云函数写一个低成本的“梯子”

函数计算(Function Compute)是事件驱动的全托管计算服务。函数计算无需租用和管理24小时运行的服务器(Serverless),无需搭建复杂的服务器环境,只需编写代码并上传就可以了,只需要为代码实际运行消耗的资源付费,非常便宜。
函数计算可以选择运行区域,也就是说,我们可以将函数运行的服务器区域选择到香港或者是美国,如此会带来什么样的好处,只可意会,不可言传。那么能否利用云函数写一个Proxy软件呢?请看本文!

函数计算(Function Compute)是事件驱动的全托管计算服务。函数计算无需租用和管理24小时运行的服务器(Serverless),无需搭建复杂的服务器环境,只需编写代码并上传就可以了,只需要为代码实际运行消耗的资源付费,非常便宜。
函数计算可以选择运行区域,也就是说,我们可以将函数运行的服务器区域选择到香港或者是美国,如此会带来什么样的好处,只可意会,不可言传。那么能否利用云函数写一个Proxy软件呢?请看本文!

Netty是一个基于异步NIO(non-blocking IO)模型的,事件驱动的网络应用程序框架。
不同于传统阻塞IO,非阻塞IO通常使用更少的线程,从而提高并发性能。
Netty的灵活设计使得它能够开发几乎所有基于二进制流、文本应用协议的Web应用
这篇文章将简单介绍如何使用Netty开发一个HTTP服务器
Spring Boot 2.0带来了Spring Framework 5中的新的WebFlux技术,WebFlux是基于响应式非阻塞IO编程模型的技术栈。从而能够使用不同于以往基于Servlet API的阻塞式IO处理的新方式编写后台应用。
相比以往阻塞式IO编程,响应式编程能够获得更小的开销。因为它直接处理流,而不是单个数据。
响应式编程最早由
.NET平台上的Reactive Extensions (Rx)库来实现。后来迁移到 Java 平台之后就产生了著名的RxJava库,并产生了很多其他编程语言上的对应实现。在这些实现的基础上产生了后来的响应式流(Reactive Streams)规范。该规范定义了响应式流的相关接口,并将集成到 Java 9 中。

当我们需要在Ubuntu上部署SpringBoot服务时,通常正式环境需要将监听端口切换到80端口,或443端口,但是Ubuntu为了安全起见,普通用户是不能监听1024以下端口的。另外我们需要同时支持HTTP和HTTPS,貌似SpringBoot只支持监听1个端口,这时有很多解决方案。比如使用sudo提升运行权限,也可以通过Linux防火墙iptables配置端口转发,把80端口转发到8080端口上等方式。
但是...这都不是最优的解决方案,既然用到了端口转发,不如直接安装一个NGINX服务器,做反向代理,同时也能提供静态服务能力,未来还能简单地配置升级到集群,做负载均衡。
NGINX是一款高性能Web服务器。配置简单,易扩展,并发能力强,可用于Web服务器,反向代理,负载均衡,邮件等。

我们知道SpringBoot内置了tomcat服务器,从而一个jar包就能实现web服务。但有时我们又想像传统tomcat那样部署一些外部的静态资源,虽然静态资源放在
resource文件夹的static就能解决问题,但是static文件夹的内容会作为jar的一部分,要替换的话只能替换整个jar包,极为不便。能不能配置jar包外部的文件夹作为静态资源目录呢。当然是可以的...
以下示例代码基于SpringBoot 2.0.3,采用Kotlin语言实现: