六位一体Serverless化应用,帮你摆脱服务器的烦恼
随着互联网技术的飞速发展,越来越多的应用横空出世,是以不可避免带来了大量的服务器需求。大部分的开发者都选择购买或者租用服务器,然而这样也带来了诸多的烦恼。
1.硬件成本高昂
购买服务器费用昂贵,除了基础的购买费用外,服务器对机房也有苛刻的要求,温度、湿度、防震等等的高要求都需要开发者投入大量的成本。租用服务器虽然不需要考虑服务器环境的问题,但一个性能强大的服务器也需要花费一大笔租赁费用。这些费用也许对一些大公司来说并不算什么,可对于一个刚刚起步的小项目却是无力承担的。
2.硬件资源浪费
为了能够应对应用可能遇到的流量高峰,开发者往往需要租用大量能够支撑流量上限的服务器,因此租用成本飙升。同时,在流量平稳时会存在服务器资源闲置的情况,亦造成不小的浪费。
3.维护成本可观
除了硬件上的花费,服务器的维护也需要人力支持。运维人员需要7*24小时的监控服务器状态,来应对可能出现的服务器宕机情况。
4.无法开箱即用
服务器购买或者租用回来后并不能立刻投入工作,还需要开发者对服务器进行调试、部署、测试等,才能让这些服务器最终投入使用。
服务器带来的烦恼还有很多很多,面对这些弊端,业界Serverless概念正在迅速兴起。其无需开发者购买或者租用服务器,Serverless服务商已经将服务器所需要的资源、部署、维护等统统完成了,开发者只需要接入Serverless服务商封装好的不同服务,即可基本满足他们对服务器的功能需求。
我们的男主HUAWEI AppGallery Connect(以下简称AGC)提供的Serverless服务就将服务器的开发分解成了几个不同的组件:有构建用户鉴权系统的认证服务、有承载服务器逻辑的云函数、有存放数据的云数据库、有存放资源的云存储、有托管前端页面的云托管,还有解决高并发并提升项目响应速度的云缓存等等。
开发者只需要聚焦自身的业务逻辑,将他们分解配置到对应的服务中就可以正式上线运行,免除了诸如服务器的购买或租用、维护的人力、环境的部署等与业务无关的繁琐事务。
瑞地科技健康管理平台在开发中即接入了Serverless服务,降本效果显著。
其整个平台分为健康管理小程序、管理中心和咨询师管理,一个移动端、两个平台,共享一套数据库内的数据。基于业务本身,他们的痛点很明显:① 至少需要两个后台开发团队同步开发才能保证开发周期,② 测试环境、演示环境、正式环境,多环境部署及优化后再部署,细节多容易出错。
接入AGC Serverless服务后,高效解决了上述困境,其后端开发在保障项目进度的同时人员缩减一半,人力成本降低50%,且Serverless免运维的特性亦使得运维成本降低100%。
如瑞地科技健康管理平台这般,Serverless在项目的WEB管理系统中要如何应用?下面就详细给大家分享下。
WEB管理系统,Serverless化的逻辑架构示意图如下。
WEB前端
项目管理系统的前端是WEB页面,用户通过网址访问。作为一个管理系统,用户首先接触到的应该就是登录功能了。AGC提供的认证服务提供了快速构建登录系统的能力。通常用户习惯的登录方式如手机号码、邮箱或公司内部的帐号,认证服务都可以满足。开发者无需与手机运营商对接或者自行搭建邮箱服务器,只需集成认证服务的Web SDK就可以直接接入整套的手机号码和邮箱地址的登录,包括登录/注册/发送验证码等功能。所有接口都是免费调用,唯一的收费项就是发送验证码所产生的短信费用。此外,认证服务还为后续的其它Serverless服务提供用户鉴权能力。
后端微服务
用户帐号系统搭建完成后,我们就来到了项目的后端逻辑部分。通过逻辑架构示意图我们可以看出这个后端系统中最核心的部分就是云函数和它所承载的后端逻辑。其后端的微服务是采用Spring Boot框架开发,我们可以选择通过HTTP请求调用的自定义运行时函数方式来进行云函数改造。Spring Boot框架的微服务逻辑无需太大改造,只需要在项目中创建一个对外暴露的invoke接口,外部在调用函数时通过这个invoke接口做统一逻辑分发即可。
invoke接口的代码样例:
@RequestMapping(path = "/invoke", method = RequestMethod.POST)
public Object postSimple(HttpServletRequest req, @RequestBody JSONObject body)

接口添加完成后,我们就可以将微服务打包成jar包,并按照如下的格式准备函数包并上传部署即可。
function.zip
|---bootstrap //可执行文件,启动Server
|---WiseFunctionCustomDemo.jar
|---其他相关代码和依赖等

其中bootstrap文件示例如下
#!/bin/bash
java -jar WiseFunctionCustomDemo.jar

函数准备好后,我们就可以通过创建函数时生成的HTTP请求地址来触发函数。
后端系统除了函数承载的逻辑外,还需要存放数据的数据库、存放文件的存储系统、支撑函数高并发和快速响应等性能指标的缓存。在这,云数据库,云存储和云缓存可以为你一一实现。
所有的数据库和存储的操作都可以由云函数统一管理,只需要接入对应服务的Server SDK,即可进行数据库的增删改查以及文件的存储下载分发。云缓存服务也提供了对应的SDK进行管理,由于云缓存服务是基于Redis打造,故对于熟悉Redis的开发者可以极速上手。
部署上线
前端后端都愉快的打造完成,最后一步就是部署上线了。为了贯彻0服务器的宗旨,整个管理系统网页的部署可以通过云托管服务来进行。开发者前端的软件包直接上传托管在云托管中,并选择使用自己通过国家备案的域名来进行访问,这样不需要任何的服务器便能让外部用户直接访问整个系统。
云函数、云数据库、云存储、云缓存、云托管、认证服务,AGC提供的这些服务在项目中六位一体的实现了WEB管理系统Serverless化,就此将服务器的烦恼统统甩到“云”后。
另外,目前云函数、云数据库、云存储、认证服务已覆盖鸿蒙应用/鸿蒙元服务的开发,全面助力鸿蒙开发者。
欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh
六位一体Serverless化应用,帮你摆脱服务器的烦恼的更多相关文章
- 4 个场景揭秘,如何低成本让容器化应用 Serverless 化?
作者 | changshuai FaaS 的门槛 Serverless 形态的云服务帮助开发者承担了大量复杂的扩缩容.运维.容量规划.云产品打通集成等责任,使得开发者可以专注业务逻辑.提高交付速度 ( ...
- Serverless 架构:用服务代替服务器
Serverless 架构:用服务代替服务器 转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需 加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:&q ...
- 为eclipse EE(汉化版) 配置Tomcat服务器
为eclipse EE(汉化版) 配置Tomcat服务器 很多小朋友在初次使用eclipse进行web开发的时候,很是蒙蔽.以前都是文本编辑器写好,做好目录结构,往tomcat下一扔,重启,搞定. ...
- 如何使用 K8s 两大利器"审计"和"事件"帮你摆脱运维困境?
概述 下面几个问题,相信广大 K8s 用户在日常集群运维中都曾经遇到过: 集群中的某个应用被删除了,谁干的? Apiserver 的负载突然变高,大量访问失败,集群中到底发生了什么? 集群节点 Not ...
- Serverless(baas & faas)无服务器计算
自从2014年AWS推出Lambda服务后,Serverless一词越来越热,已经成为一种新型的软件设计架构,即Serverless Architecture.作为一种原生于公共云的架构,Server ...
- CentOS 7 最小化安装配置以及网络服务器搭建、配置与管理
一.环境介绍: 运行软件:VMware Workstation Pro 系统环境:CentOS-7-x86_64-1810 系统网络运行模式:NAT模式 二.操作配置: 1.配置动态获取IP 1) 修 ...
- CSS3 pointer-events:none 让你摆脱事件的烦恼
以前没遇到这个属性,在一个偶然的博文下发现该属性真的好用,你是否遇到过写鼠标移入显示文本的效果时,鼠标在元素内的每一次移动都会造成要显示文本的闪烁或是突然的消失?只要在被控制的元素中加上这个属性完美解 ...
- 从函数计算架构看 Serverless 的演进与思考
作者 | 杨皓然 阿里巴巴高级技术专家 导读:云计算之所以能够成为 DT 时代颠覆性力量,是因为其本质是打破传统架构模式.降低成本并简化体系结构,用全新的思维更好的满足了用户需求.而无服务器计算(S ...
- 当 RocketMQ 遇上 Serverless,会碰撞出怎样的火花?
作者 | 元毅 阿里巴巴高级开发工程师 阿里巴巴云原生公众号后台回复 Knative,免费下载<Knative 云原生应用开发指南>电子书! 想必大家都比较了解 RocketMQ 消息服 ...
- Serverless架构详解:开发者如何专注于业务代码本身?
本文来自腾讯云技术沙龙,本次沙龙主题为Serverless架构开发与SCF部署实践 演讲嘉宾:黄文俊,曾负责企业级存储.企业级容器平台等产品的架构与开发,目前主要负责SCF腾讯无服务器云函数产品相关. ...
随机推荐
- 【pytest】执行测试不输出logging日志问题
[一] 今天更新了一波pytest,4.50 -> 6.2.3.执行了一波测试发现之前的logging输出不见了. 看了下启动参数 --log-cli-level=LOG_CLI_LEVEL 加 ...
- vue-cli4初探、问题解决和心得
创建.调试.打包 vue create event-vue npm run serve //这个好,官方推荐`vue serve`没用 npm run build 项目结构 package.json ...
- windows根据文件名找到进程,并杀死进程。
背景:最近因为工作原因,装了360杀毒引擎,完了就卸载了.发现一直提示文件正在使用无法删除.文件无法访问等等.经过一系列操作,安全模式下都无法删除,恶心死了... 1.shirt + del 按文件夹 ...
- Servlet执行步骤
<!-- 1. 用户发请求,action=add 2. 项目中,web.xml中找到url-pattern = /add -> 第12行 3. 找第11行的servlet-name = A ...
- SaltStack学习笔记
SaltStack三大功能: 1. 远程执行 2. 配置管理 (状态) 3.云管理 运维三板斧:监控.执行.配置 四种运行方式: 1.Local 2. Minion/Master C/S架构 3 ...
- 关于IllegalMonitorStateException异常的解释之一
注意 在同步控制方法或同步控制块里调用wait(),notify()和notifyAll().如果在非同步控制方法里调用这些方法,程序能通过编译,但运行的时候,将得到IllegalMonitorSta ...
- Python生态工具
Python内置小工具 1秒钟启动一个下载服务器 在实际工作中,时常会有这样的一个需求:将文件传给其他同事.将文件传给同事本身并不是一个很繁琐的工作,现在的聊天工具一般都支持文件传输.但是,如果需要传 ...
- 模拟实现call,apply,bind方法,以及三者区别
// 模拟实现call方法 Function.prototype.call2 = function (context) { var context = context || window; conte ...
- bigNumber.js的简单使用
sum 计算传入的参数和,参数类型可以是 String,Number // 两数之和 var x = BigNumber.sum('11', 23) x.toNumber() // 34 // 多个参 ...
- 实验1.SDN拓扑实践
实验1:SDN拓扑实践 一.基本要求 (一)Mininet运行结果截图 (二) 使用Mininet的命令行生成如下拓扑: 1. 3台交换机,每个交换机连接1台主机,3台交换机连接成一条线. 2. 3台 ...