首页 文章 精选 留言 我的

精选列表

搜索[搭建],共10000篇文章
优秀的个人博客,低调大师

教你 4 步搭建弹性可扩展的 WebAPI

作者 | 萧起 阿里云云原生团队 本文整理自《Serverless 技术公开课》,关注“Serverless”公众号,回复“入门”,即可获取 Serverless 系列文章 PPT。 导读:本节课程主要分为三个部分,基本概念中介绍基于函数计算的 WebAPI 与普通的 WebAPI 的区别及优势;开发流程中介绍如何在函数计算的控制台进行 WebAPI 的开发;操作演示中会实例演示函数计算 WebAPI 的开发过程。 基本概念 常见的 WebAPI 架构如上图所示,主要包括客户端(浏览器)、服务器、数据库,WebAPI 由服务器提供,同时服务器要完成负载均衡、登录鉴权的相关操作。 当客户端流量快速增大时,服务器端只能通过水平扩展加机器的方式来增加提高服务能力。 这种常规模式主要有两点局限性: 技术同学除了开发业务代码,有大量的服务器运维成本,来保证服务的稳定性、可用性,技术同学要花费很多时间进行运维工作,占用开发时间,降低项目研发效率。 流量突然增加时,需要水平扩展加机器,弹性的响应能力差,扩容速度往往要数十分钟,无法实现秒级极速扩容,导致一段时间内的服务能力不足。同时当流量变少时,难以做到及时缩容,造成机器的成本浪费。 基于函数计算的 WebAPI 架构如上图所示,与常规的 WebAPI 架构相比,客户端和数据库未发生变化,但服务器变化巨大,主要体现在: 之前需要开发团队维护的路由模块以及鉴权模块都将接入服务商提供的 API 网关系统以及鉴权系统,开发团队无须再维护这两部分的业务代码,只需要持续维护相关规则即可。 在这个结构下,业务代码也被拆分成了函数粒度,不同函数表示不同的功能。 我们已经看不到服务器的存在,是因为 Serverless 的目的是让使用者只关注自己的业务逻辑即可,所以一部分安全问题、资源调度问题(例如用户量暴增、如何实现自动扩容等)全都交给云厂商负责。 相对于传统项目而言,传统项目无论是否有用户访问,服务都在运行中,都是有成本支出,而 Serverless 而言,只有在用去发起请求时,函数才会被激活并执行,且会按量收费,可以实现在有流量的时候才有支持,没有流量的时候就没有支出,相对来说,成本会进一步降低。 开发流程 1. 登录函数计算控制台,创建应用 可以通过两种方式来创建应用,如果是已有的 Web 项目,可以选择上图中的第一种方式:“常见 Web 应用”;对于新项目则推荐使用第二种方式:“基于模板创建应用”。我们这里使用模板方式,选择基于 Python 的 Web 应用。 模板可以当做应用脚手架,选择适合的模板,可以自动完成相关依赖资源的创建,如角色、OSS、域名网关等,降低开发成本。 2. 新建函数 在应用下,创建函数,我们是开发 WebAPI,所以选择“HTTP”函数,这种函数会将指定的 http 请求作为触发器,来调度对应函数的执行。 函数新建好之后,是个返回 helloWorld 的 demo,我们在此基础上来开发我们的业务逻辑。 首先介绍下上图代码中的 handler 函数,这个函数是入口函数,http 触发器接收到调用后会通过这个入口来启动整个函数。函数有两个入参,environ 和 start_response: environ environ 中主要包含两部分内容:http 请求的入参和函数执行上下文 fcContext,函数上下文参数中包含一些函数运行时的信息(例如request id、临时 AK),您在代码中可以使用这些信息。信息类型是FCContext。 start_response 该参数主要用于生成 http 请求的 response。 3. 配置触发器,绑定域名 在新建函数时会自动创建一个 http 触发器,这个触发器的路径是“aliyun.com”的一个测试路径,只能用于测试,真实的应用需要通过自定义域名将真实域名与函数绑定,这样访问指定域名时,对应函数就会被触发执行。 4. 日志与监控 在每个函数编辑页面,日志和监控服务,函数的每次执行都会生成唯一的 requestId,日志中通过 requestId 进行查询,看到本次函数执行的所有日志。 操作演示 点击链接即可观看演示视频:https://developer.aliyun.com/lesson_2024_18999 课程推荐 为了更多开发者能够享受到 Serverless 带来的红利,这一次,我们集结了 10+ 位阿里巴巴 Serverless 领域技术专家,打造出最适合开发者入门的 Serverless 公开课,让你即学即用,轻松拥抱云计算的新范式——Serverless。 点击即可免费观看课程:https://developer.aliyun.com/learning/roadmap/serverless Serverless 公众号,发布 Serverless 技术最新资讯,汇集 Serverless 技术最全内容,关注 Serverless 趋势,更关注你落地实践中的遇到的困惑和问题。

优秀的个人博客,低调大师

基于阿里云搭建自己的的Typecho博客

简介 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化CPU、内存、流量监控图表,计划任务等功能。总之就是一款适合新手和不想折腾的老手的一款服务器管理软件 宝塔官网 下载与安装 首先通过ssh工具(推荐FinalShell)连接服务器,然后执行宝塔官方安装命令 Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh Ubuntu/Deepin安装脚本 wget -O install.sh http://download.bt.cn/install/install-ubuntu.sh && sudo bash install.sh 安装好后,会给你一个地址以及账户名密码。登录宝塔面板,建议在面板设置中修改自己的用户名密码! 安装web环境 安装完成在浏览上打开面板的地址,登入面板,面板会自动推荐你安装环境套件,这里有两种选择,第一种是LNMP套件,第二种是LAMP套件(如图): 这里推荐使用LNMP环境,使用极速安装一键安装,整个安装过程可能持续几十分钟到几个小时(根据服务器性能决定)。 宝塔一键部署Typecho(推荐) 点击设置: 选择一键部署: 填入你的域名(如果你还没有域名推荐去阿里云注册一个)请记住你的数据库名和密码,之后可能有用。 手动部署Typecho(选择自动部署的不必看) 1.下载Typecho 去Typecho官网下载最新(1.1)程序。 2.在宝塔面板中创建网站 安装完LNMP环境后就可以开始创建你的网站了,如图创建网站: 填入你的域名如果网站需要FTP,可以打开,数据库一定要创建,一定要记住用户名,密码,等会儿安装Typecho的时候需要! 3.将Typecho程序放入网站目录 去到上一步建立的网站根目录: 删除里面的几个文件,将下载好的Typecho程序上传至该目录解压, 这样就可以了。 安装Typecho 确认你的域名解析已经设置,用浏览器访问你的域名。看到这一步就代表之前的配置没问题,点击我准备好了, 开始下一步 安装的时候主要就是配置数据库,填入你刚刚建立网站的时候的数据库配置, 用户名和密码可能大家知道,数据库名有些同学可能不太清楚,可以去这里查看: 配置好数据库后,创建你的管理员账户之后就可以开始安装了。安装很快就会完成。 设置固定连接(微信小程序必设置) 设置固定连接有助于优化网站SEO,让搜索引擎更容易收录您的文章。登录你的网站后台,点击上方的设置->永久链接: 请按上图设置 然后去宝塔面板设置Nginx伪静态: ​ 保存就可以了,这样你的网站的固定连接就设置完成了。可以随便写一篇文章,访问这篇文章看看固定连接是否设置成功以本文章为例,这样的话就代表设置成功了: 开启HTTPS(微信小程序必设置) 所谓Https就是对网站加密,浏览器看上去是这样的: 宝塔面板支持一键部署Https,到这里就可以部署, 上图是已经部署好Https的示例,建议开启强制Https。 附阿里云免费证书申请地址 里面有免费证书的选项可以选择。 总结 这样就完成了Typecho部署安装

优秀的个人博客,低调大师

Python搭建新冠肺炎预测模型全解读

新冠病毒疫后复工成为当务之急,然而病毒尚未消散,风险权衡面临不确定因素,如果可以准确预测未来的疫情走势,将会为复工计划的制定提供有效辅助。 传统机器学习模型虽然可以精确拟合历史数据,但由于脱离疾病传播机理,外推预测的可靠性低。另一方面,传染病学领域提出的传播模型则恰好相反,主要依赖疾病传播机理进行推演,但对历史数据的拟合能力弱,不同疾病会得到相似的结论,特异性不足。 近日,南栖仙策通过强化学习融合传染病传播机理与数据拟合,使用其自主研发的Universe平台构建传播模型,并基于横琴先进智能计算平台提供人工智能计算资源,实现新冠病毒疫情长达60天的预测,可为疫情防控提供决策辅助。 在线预览预测结果:http://ncov.polixir.ai 值得注意的是,目前AI领域常用的深度学习模型是黑盒模式,内部运算过程难以被人们理解,同时也难以将人

优秀的个人博客,低调大师

基于容器服务快速搭建小程序后端服务

场景描述 小程序作为一种新的开放能力被广泛应用于各业务场景,开发者可以快速地开发一个小程序,在微信可便捷地获取和传播,同时依赖微信平台原生能力获取出色的使用体验。 阿里云容器服务结合阿里云云原生能力帮助客户快速构建小程序的后端服务。 解决问题 微服务架构开发实践 ACK部署微服务实践指导 产品列表 专有网络VPC 云数据库 MySQL 云服务器ECS CDN 对象存储OSS 容器镜像服务ACR 直达最佳实践 》》

优秀的个人博客,低调大师

快速搭建 Serverless 在线图片处理应用

作者:倚贤 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息参考。ImageMagick:ImageMagick 是一个用于查看、编辑位图文件以及进行图像格式转换的开放源代码软件套装。它可以读取、编辑超过100种图象格式。。参见维基百科词条 ImageMagick 是图片处理的利器,借助 ImageMagick 可以轻松实现图片的裁剪和缩放。虽然很多语言都封装了 ImageMagick 的调用库,但是把图片处理功能和核心业务功能放在同一个服务内,在软件架构上往往不适合。有如下两方面的原因

优秀的个人博客,低调大师

用Vearch搭建一个图片搜索服务

什么是图片搜索 古时候人们对图片的处理能力非常有限,图片搜索可能是图片的文件名,摘要,或者长度宽度,或者路径等进行文本搜索,巴特现代社会人们更喜欢用以图搜图来替代这种说法,基本上各大搜索引擎都支持这种搜索方式。如下图 什么是Vearch Vearch 是一个分布式向量搜索系统,可以用来计算向量相似度或用于机器学习领域,支持十亿级别秒级的向量索引, 如:图像识别, 视频识别或自然语言处理各个领域。 本系统基于 Faiss 实现, 提供了快速的向量检索功能。提供类似 Elasticsearch 的 Restful API 可以方便的对数据及表结构进行管理查询等工作。 代码在这里:码云仓库 手把手教学 环境要求。计算机 + docker + python3 安装docker 如果你不会安装,自行百度,这个不在本文的讨论范围,如果学了也不会安装docker,点右上角关闭。(Linux,mac左上角),为了方便我们不以虚拟路径代替。使用真实路径描述安装过程。读者可以根据自己的情况修改工作路径,后不多做陈述。 编译&启动Vearch # 创建目录 mkdir -p /home/vearch cd /home/vearch [root@localhost vearch]# pwd /home/vearch #下载源码 [root@localhost vearch]# git clone https://github.com/vearch/vearch.git Cloning into 'vearch'... remote: Enumerating objects: 50, done. remote: Counting objects: 100% (50/50), done. remote: Compressing objects: 100% (36/36), done. remote: Total 3791 (delta 22), reused 19 (delta 7), pack-reused 3741 Receiving objects: 100% (3791/3791), 11.73 MiB | 342.00 KiB/s, done. Resolving deltas: 100% (731/731), done. [root@localhost vearch]# # 编译Vearch cd vearch/cloud/ docker pull ansj/vearch_env ./compile.sh # 创建vearch可运行镜像 ./build.sh # copy exaple配置文件过来作为单机配置 cat ../config/config.toml.example > config.toml # 启动Vearch docker run -p 8817:8817 -p 9001:9001 -v $PWD/config.toml:/vearch/config.toml vearch all 如果启动成功你将会看到如下信息 2019/10/15 04:58:13 startup.go:63: [INFO] start server by version:[0.1] commitID:[3a0ed89b690ea2cf566a45fc5681b0a1ca170726] 2019/10/15 04:58:13 startup.go:72: [INFO] The Config File Is: /vearch/config.toml 2019/10/15 04:58:13 startup.go:76: [INFO] The configuration content is: 。。。。。 打开浏览器访问 http://127.0.0.1:8817/ 可以看到下图说明启动的妥妥的 启动图片插件 cd /home/vearch/vearch/plugin sudo ./bin/run.sh image 如果启动成功你将会看到如下信息 load model success 创建库表 且让吾等建库表,名之test curl -XPOST -H "content-type:application/json" -d '{ "db": true, "method": 0, "columns": { "imageurl": { "type": "keyword" }, "boundingbox": { "type": "keyword" }, "label": { "type": "keyword" } }, "feature": { "type": "vector", "filed": "imageurl", "model_id": "vgg16", "dimension": 512 } }' http://127.0.0.1:4101/test/test/_create 数据插入 库表已成,则应存入数据,一下demo为事例 curl -XPOST -H "content-type:application/json" -d '{ "imageurl": "http://www.gming.org/uploadfile/2015/0914/20150914104444833.jpg", "detection": false, "label": "coat" }' http://127.0.0.1:4101/test/test/_insert 如尔所见如下,则功成以 {"db": "test", "space": "test", "ids": [{"AW3tYgdsAkKsEQACQOnu": "successful"}], "successful": 1} 图片搜索 curl -XPOST -H "content-type:application/json" -d '{ "imageurl": "http://www.gming.org/uploadfile/2015/0914/20150914104444833.jpg", "size": 5 }' http://127.0.0.1:4101/test/test/_search 如尔所见如下,则功成以 {"took": 63, "timed_out": false, "_shards": {"total": 1, "failed": 0, "successful": 1}, "hits": {"total": 1, "max_score": 0.9999998807907104, "hits": [{"_index": "test", "_type": "test", "_id": "AW3xfmlQAkKsEQACMRjf", "_score": 0.9999998807907104, "_extra": {"vector_result": [{"field": "feature", "source": "http://www.gming.org/uploadfile/2015/0914/20150914104444833.jpg", "score": 0.9999998807907104}]}, "_version": 1, "_source": {"boundingbox": "", "imageurl": "http://www.gming.org/uploadfile/2015/0914/20150914104444833.jpg", "label": "coat"}}]}}%

优秀的个人博客,低调大师

如何快速搭建一个短链接服务?

摘要: 很简单的短链接教程。 原文:十分钟实现短链接服务(Node + Express + MongoDB) 作者:MudOnTire Fundebug经授权转载,版权归原作者所有。 短链接我们或多或少都使用过,所谓短链接就是根据较长的原链接url生成一段较短的链接,访问短链接可以跳转到对应的原链接,这样做好处在于:1. url更加美观;2. 便于保存和传播;3. 某些网站内容发布有字数限制,短链接可以节约字数。 短链接实现的原理非常简单,可以概括为: 为每个原链接生成不重复的唯一短链接 将原链接和对应短链接成对保存到数据库 访问短链接时,web服务器将目标重定向到对应的原链接 根据以上思路,我们自己也可以分分钟实现一个短链接生成服务。本文示例使用 node + express + mongodb。 1. 初始化项目 (1). 安装如下依赖: package.json: "dependencies": { "config": "^3.2.2", // 读取项目配置 "express": "^4.17.1", // web服务器 "mongoose": "^5.6.9", // 操作mongodb "shortid": "^2.2.14", // 生成不重复的唯一Id "valid-url": "^1.0.9" // 判断url格式是否正确 } (2). 增加项目配置: 主要用于存放MongoDB的连接字符串和短链接的base url。 config/default.json: { "mongoURI": "mongodb://localhost:27017/url-shorten-service", "baseUrl": "http://localhost:5000" } (3). 增加MongoDB连接方法 config/db.js: const mongoose = require('mongoose'); const config = require('config'); const db = config.get('mongoURI'); const connectDB = async () => { try { await mongoose.connect(db, { useNewUrlParser: true }); console.log(`MongoDB Connected to: ${db}`); } catch (error) { console.error(error.message); process.exit(1); } } module.exports = connectDB; (4). 启动express: index.js: const express = require('express'); const connectDB = require('./config/db'); const app = express(); // 连接MongoDB connectDB(); app.use(express.json({ extended: false })); // 路由,稍后设置 app.use('/', require('./routes/index')); app.use('/api/url', require('./routes/url')); const port = 5000; app.listen(port, () => { console.log(`Server running on port ${port}`); }); 2. 定义数据库模型 我们需要将原链接和对应短链接保存到数据库,简单起见,我们只需要保存一个短链接编码,相应的短链接可以使用base url和编码拼接而成。 models/url.js: const mongoose = require('mongoose'); const urlSchema = new mongoose.Schema({ urlCode: String, longUrl: String }); module.exports = mongoose.model('Url', urlSchema); 3. 生成短链接编码 这是我们实现的关键一步,思路是:用户传入一个长链接,我们首先使用 valid-url 判断传入的url是否合法,不合法则返回错误,如果合法我们在数据库中搜索是否有该长链接的记录,如果有则直接返回该条记录,如果没有则生成一条新记录,并生成对应的短链接。借助于 shortId,我们可以很方便的生成一个不重复的唯一编码。 routes/url.js: const epxress = require("express"); const router = epxress.Router(); const validUrl = require('valid-url'); const shortId = require('shortid'); const config = require('config'); const Url = require('../models/url'); router.post('/shorten', async (req, res, next) => { const { longUrl } = req.body; if (validUrl.isUri(longUrl)) { try { let url = await Url.findOne({ longUrl }); if (url) { res.json({ shortUrl: `${config.get('baseUrl')}/${url.urlCode}` }); } else { const urlCode = shortId.generate(); url = new Url({ longUrl, urlCode }); await url.save(); res.json({ shortUrl: `${config.get('baseUrl')}/${urlCode}` }); } } catch (error) { res.status(500).json('Server error'); } } else { res.status(401).json('Invalid long url'); } }); module.exports = router; 4. 访问短链接跳转到原链接 最后一步非常简单,当用户访问我们生成的短链接时,我们根据url中的短链接编码查询到对应记录,如果存在对应记录我们使用express的res.redirect方法将访问重定向至原链接,如果不存在则返回错误。 routes/index.js const epxress = require("express"); const router = epxress.Router(); const Url = require('../models/url'); router.get('/:code', async (req, res, next) => { try { const urlCode = req.params.code; const url = await Url.findOne({ urlCode }); if (url) { // 重定向至原链接 res.redirect(url.longUrl); } else { res.status(404).json("No url found"); } } catch (error) { res.status(500).json("Server error"); } }); module.exports = router; 测试一下: 访问短链接: 这样,一个简单的短链接生成服务就完成了,往往在我们看来很神奇的技术其实背后的原理和实现很简单,希望本文对大家有所启发。 最后,推荐大家使用Fundebug,一款很好用的BUG监控工具~ 本文Demo地址:https://github.com/MudOnTire/url-shortener-service 关于Fundebug Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了20亿+错误事件,付费客户有阳光保险、核桃编程、荔枝FM、掌门1对1、微脉、青团社等众多品牌企业。欢迎大家免费试用!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册