首页
免费后端云服务
关于
推荐
免费图床源码
Search
1
小程序后端入门系列视频教程【一-微信开发工具介绍】
9,722 阅读
2
微信小程序三级联动之多列选择器
9,606 阅读
3
小程序开发免费后端之神秘利器分享
9,536 阅读
4
Golang-开发企业级资源权限管理【第一步表设计】-1
9,081 阅读
5
学会微信服务端开发第一步
8,979 阅读
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
登录
Search
Magic
累计撰写
124
篇文章
累计收到
73
条评论
首页
栏目
日常记录
日常
随笔
Bmob后端云
从零开始学物联网
Serverless实战驾校小程序
心邮
Serverless
向量数据库
页面
免费后端云服务
关于
推荐
免费图床源码
搜索到
124
篇与
的结果
2021-02-13
ServerlessBmob_FaaS_或函数即服务_介绍1
Bmob FaaS 或“函数即服务” 介绍 函数即服务是一种新的软件基础设施术语,它比容器颗粒更小。FaaS与Baas很类似,都是为了提高开发效率,解决微服务中所遇到的问题,先对而言Faas灵活度更高。大家一般把 Faas+Baas\=Serverless.Bmob在国内最早做这个的企业之一,当时还完全未有借鉴,在走这条路的过程中也遇到了许许多多困难。 什么是函数服务有人举了个很好的例子. 来源阿里云社区.png 图侵权删Serverless是一种基于互联网的技术架构理念,它具有 1、低运营成本; 2、简化设备运维; 3、提升可维护性; 4、简单易用,更快的开发速度; 5、相对小企业可靠性更好好面临的问题 1.用户无数的Function 如何处理? 2.如何实现弹性部署? 3.如何集成日志、监控等工具? 4.服务问题? 5.安全问题?第一个问题:用户无数的Function 如何处理? 1.我们可以给每个用户Function建立一个文件夹 2.我们可以每个用户一个容器第二个问题:如何实现弹性部署? 1.如果要实现这一秒1K QPS,下一秒1W QPS。负载均衡有限的弹性部署中小云厂家是可以做到,并且你有活动还可以手动给你账户定制QPS。 2.如果要实现这一秒1K QPS,下一秒10W QPS、100W QPS,这种目前只能自有机房的厂家玩(像目前腾讯、阿里云都支持,他们今年也都推出了Faas,目前都在公测阶段),费用也不会低。不过流量到这一级别很多企业早已经用自己系统了,至少目前国情是这样。 发展历程.png第三个问题:如何集成日志、监控等工具? 1.这个主要分2种,一种提供给用户,一种提供内部使用。 2.提供给用户的有函数回调结果日志,定时任务日志。监控QPS流量等。第四个问题:服务问题? 1.Faas服务问题是个人认为最难解决的问题,由于各个厂家对Faas的封装没有一个统一的标准,大家代码也互不兼容。并且都封装了一些自己内部的函数,由于发展初期用户很难子啊各大网站找到答案,导致部分用户遇到问题需要人工技术支持才能走入正轨,这是Faas普及的一大难点。第五个问题:安全问题? 1.目前市场做防攻击的上市企业防攻击技术是比较成熟的,只要你攻击很快很准确的监控并定位攻击流量,大多数恶意行为都能被监测隔离,被清洗掉。虽然不能吹嘘的像个别企业说能做到:到达服务器的攻击流量也能很快的被隔离,关进小黑屋,不过换个ip 还是可以的,相比一些中小企业直接暴露ip还是安全很多。有些人说Baas 厂家提供的云函数、云逻辑之类不能称之为Faas,主要说出2点。像亚马逊的Lambda,每 100 万个请求 0.20 美元,他们是按照单个请求计费的说Baas的云逻辑没有自动伸缩功能。据我了解虽然没法跟有机房的厂家比,做到类似无限伸缩,不过Bmob、与AV的Faas产品都是可以根据业务定制的。有些人说Baas 随着serverless的发展,以后小公司就不需要运维工程师。个人觉得这天还早,除非国内各大平台的Faas 都能统一标准。这种新型产品,由于需要对外界暴露函数访问域名,目前政策也还不太明朗,如果手动绑定自己域名就加重了使用成本。对于初创团队或者企业新业务来说使用这种服务是最合适的,因为Serverless能做到快、好、省。不过对于Serverless的普及,个人觉得国内难度还是很大,由于完全由第三方管理目前最大的挑战还是信任与服务问题。不过在国内,已经超过10W+开发者已经接受这种模式。
2021年02月13日
11 阅读
0 评论
0 点赞
2020-12-09
Quikapp快应用【小程序】开发入门教程三
这一节本身正常是没有的,由于确实遇到了,这里描述下开发第三天到晚上下班调试还好好,早上开机手机调试进入无响应模式,具体就是点击开始调试弹出一下图没说具体错误,控制台也没错误。把之前写的代码都删了,折腾了好久好久,没解决。过了一周没理他,看他会不会神奇的好过来,然而并没有。就这事,问了华为负责快应用的同事, 华为那边反馈是这块开发工具是联盟那边的, 建议用华为内侧的开发工具。实在是解决不了,也没说明白什么错误,然后就下载了华为的开发快应用工具。下载安装后,由于内测中的开发工具,调试复杂,工具功能比较少,需要插线安装ADB驱动, 不支持调试接口,预览也是不行,基本可以理解为一个基于vscode开源的编辑器,还未调通。又过了几天,已经把之前的代码重写删掉,重新用联盟的开发工具,再次运行,希望能调试,开发一个小应用出来。重新初始新建一份代码,再次运行,这次可以预览,只是开发工具好像再也不能打印调试日志了,自身的运行日志也不再显示出来到这一步,已经不知道具体怎么把这个日志,让他显示出来。然后经过重新搭建,仔细阅读,想起了,原生配置是不提供这个日志输出,需要大家自己打开日志/src/manifest.json中config配置代码如下:{ "config": { "logLevel": "debug" } }修改后,又可以慢慢得调试了
2020年12月09日
5,892 阅读
0 评论
12 点赞
2020-08-09
mongodb运维很重要的10条规律
多年运维Mongodb,以下经验,非常认可,分享给大家。1.mongodb 表名和字段名统一用小写字母mongodb 是默认区分大小写的,为了避免以前在 mysql 下遇到的大小写敏感导致程序访问频频出错,建立规范,mongodb 的表名和字段名都用小写字母命名。2.尽可能的缩短字段名的长度mongodb 的 schema free 导致了每笔数据都要存储它的 key 以及属性,这导致了这些数据的大量冗余。开发人员也许考虑到,从易读性出发设计的 key 名,基本都是按照字面意思去设计的,这导致 key 很长,对应的数据存储占用了很大的空间。所以,在你的程序里维护一套字典即可,尽可能降低 key 的长度。譬如:static final String CONTENT = "content";static final String CONTENT_TYPE = "ctype";static final String CONTENT_LENGTH = "clen";这个很重要,如果你单表有1000W条记录,如果字段名称,减少几个字母,你想想可以节约多少空间,查询速度提高多少。3.记住,mongodb 的查询每次只能用到一个索引对于较复杂的表结构,可能会导致你频频使用联合索引。但记住:1)mongodb 单表最大索引数为 64 。2)索引越多,插入或修改记录就会导致 mongodb 越慢。写锁会阻塞读请求,写得越慢,阻塞读请求越多、阻塞时间越长。所以,索引越加越多的时候,你可能需要审视一下表结构设计的合理性。这个很容易理解,索引是在这个表里,内存保留的另外一份数据,当索引多的时候,插入数据需要生成多份,所以就慢了。4.客户端连接数大小的设置mongodb-java-driver 的连接池,目前从观察到的情况是应用一开启便根据 connectionsPerHost 变量的设置,建立全部连接,然后提供给程序使用,并且一旦其中某个连接到数据库的访问失败,则会清空整个连接池到这台数据库的连接,并重新建立连接。而 mongodb 对中断连接的垃圾清理工作则是懒惰的被动清理方式,如果驱动程序端配置的连接数过大,一旦发生重连,则会导致 mongo 服务器端堆积大量的垃圾连接以及对应数据,导致主机资源耗尽。建议: mongodb 驱动的连接池大小的设置一般应该控制 100 左右。( 参考阅读:PHP-FPM模式下可怕的 MongoDB-PHP-Driver 连接池无节制连接问题)5.实例分离mongodb 对数据库的访问全部加锁。如是查询请求则设置共享锁。数据修改请求则设置全局排他锁,且是实例级别的排他锁。写锁会阻塞读请求,如果长时间持有写锁,会阻塞整个实例的读请求。建议:1)不同应用不应该共用同一个实例,防止互相阻塞!2)如服务器资源不足,共用同一个实例,要保证读写特性相同,如都是读多写少,防止一台写多应用阻塞读请求。(评语:旧版本的MongoDB (pre 2.0)拥有一个全局的写入锁,这个问题在2.0版本中的得到了显著的改善,并且在当前2.2版本中得到了进一步的加强。MongoDB 2.2使用数据库级别的锁在这个问题上迈进了一大步。所以用 MongoDB 2.2的人可以忽略此条目。)如果有条件,这个很重要,一个应用如果表设计的特别糟糕,会影响整个实例的效率,这个不只是2.2版本,最新的mongodb3.4也一样。6.需要重点关注的 mongodb 性能指标关注主要性能指标:1)Faults:显示 mongodb 每秒页面故障的数量,这个是 mongodb 映射到虚拟地址空间,而不是物理内存。这个值如果飙高的话,可能意味着机器没有足够的内存来存储数据和索引。2)Flushes:每秒做了多少次 fsync,显示多少次数据被刷新进了磁盘。3)locked:写锁。4)idx miss:索引未命中比例。5)qr | qw:读写锁的请求队列长度。6)conn: 当前已经建立的连接数。这几个性能指标都很重要,当然,你从外表去观察,也就连接数了。7.严重的空间碎片问题mongodb 如果数据修改很频繁,会出现比较严重的空间碎片问题,表现在磁盘文件扩张与实际数据量不相符,内存不够用,索引命中率低,查询效率降低。碎片整理,目前我们采用的版本没有太有效的方法。可以用 db.repaireDatabase() 来整理数据库,这个过程非常的慢。如果是 master/slave 模式,则相当于执行一次主从切换,然后从新建立从库。如果是 replSet 架构,可以停掉数据库,然后删除数据目录,从新从复制组中全同步数据,这个时候要考虑 oplog 的尺寸。一个大体的步骤:1)先调用rs.freeze(1200),将每个不想让它成为 primary 的机器让它在 1200 秒内无法成为 primary(这步也可以不做);2)将 primary stepDown,不出意外新的 primary 会起来;3)将原 primary kill 掉;4)删掉所有 data 数据(调用 repair 很慢,真不如干掉重新来);5)再重启动原 primary 的进程;6)以此循环完成整个复制组的全部重建。这个多年的库会存在大量碎片,但速度实在太慢,如果大数据,这个操作可要费点功夫了8.连接池 WriterConcern 模式选择有些应用配置了 WriterConcern.FSYNC_SAFE 模式;这种配置意味着客户端在插入数据或更新数据的时候,要求 mongodb 必须将所更新的数据写入磁盘并返回更新成功的信息给程序。如果碰上应用程序访问压力大,mongodb 就会反应迟钝,并可能会假死。针对此情况,需要评估数据的一致性需求,做出合适调整。我们一般建议关闭此选项。(评语:刘奎波的业务中心优化时就关闭了这个 WriterConcern.FSYNC_SAFE 模式)9.开发时注意的细节1)更新某条数据的时候,先查出来再更新会减小锁的时间;2)只有真正需要的字段才select出来;3)只有返回很少结果的查询才用索引,否则会加载太多数据,比没有用索引还慢!4)属性比较多的时候,建立分层的关系能够提高查询效率,否则每个记录都要过一遍才能找到要的属性。(评语:貌似说的是以 Array 形式存储的 subdocument)5)skip+limit 翻页,越往后面越慢。比较靠谱的做法是,先找出上次的id,翻页的时候不用 skip:last_row_id = ObjectId('....');db.activity_stream->find({_id:{$lt: last_row_id },user_id:20 } ).sort( {_id:-1} ).limit(10);这个第一条Bmob后端云等平台,只提供基于objectid更新数据,也就是这个道理,让大家先查询出来,再更新。 第二条,需要大家自己优化,平台没法给你操作。 第五条其实是最常用的优化手段,在性能一般的情况,50w数据,就需要这样操作了10.关于硬件资源的选择虚拟机可以很好的隔离资源,并可动态的扩展。我们建议 mongodb 的部署采用虚拟机的方式,每个虚拟机部署一个实例,使各节点分散在不同的物理机上,根据应用的前期预测,平衡虚拟机的之间的i/o。
2020年08月09日
7,761 阅读
0 评论
4 点赞
2020-08-04
个人用户免费开发上线小程序
公众号不能个人注册,昨天小程序开始支持个人开发者申请,以后个人可以申请小程序玩玩。说明未来会比公众号还多的小程序。今天给大家分享个人如何免费拥有发布线上的小程序既然申请资质可以免费申请,那就缺一个后端存放接口跟数据库。目前这块解决方案无非2种,一种自己买主机,另一种用后端云服务。自己买主机是需要收费的,然后各种环境搭建非常复杂。前端门槛减低了图片资源大小降低
2020年08月04日
6,646 阅读
0 评论
2 点赞
2020-07-19
学会微信服务端开发第一步
什么是微信开发第一步?微信公众平台开发第一步详解如果有人问你,微信体系下,开放平台、公众号、小程序开发第一步是做什么?我的回答是获取微信access_token。access_token是公众号的全局唯一接口调用凭据, 没有凭据后面的其他接口,都没法调用。公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。官方文档地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183接口地址https请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET参数说明参数是否必须说明grant_type是获取access_token填写client_credentialappid是第三方用户唯一凭证secret是第三方用户唯一凭证密钥,即appsecret返回说明正常情况下,微信会返回下述JSON数据包给公众号:{"access_token":"ACCESS_TOKEN","expires_in":7200}调试工具微信官方为了大家开发公众号时,提供大家的开发效率,特地给开发者上线了一套调试工具https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基础支持&form=获取access_token接口%20/token功能实现这个功能,只需要调用这个接口,然后返回access_token,我们就不搭建Liunx,PHP,node等环境,直接用当今流行的Serverless 相关平台的Faas(云函数)功能。 这里使用的是Bmob后端云,当然你用阿里、腾讯、华为等等厂商支持Faas(云函数) 功能的都可以,只是语法稍微有点不同,这些开发小程序、公众号都可以。 比自己搭建服务器要快很多。前期准备第一步:准备配置信息登陆微信平台https://mp.weixin.qq.com/进入开发-》基本配置拿到开发者ID(AppID)与开发者密码(AppSecret),开发请求时需要用到。第二步:编写云函数首先你有个Bmob后端应用,点击进入云函数。选择模板创建,当然你也可以自己变。自己编写代码,我们有一点javascript基础,或者java基础都可以。这里介绍下Nodejs文档地址:http://doc.bmob.cn/cloud_function/web/develop_doc/#http_1HTTP请求对象 oHttp对象可以模拟实现get、post、put、delete等各种HTTP请求信息,让你在云端实现诸如数据采集、OAuth授权登录等功能。Bmob的HTTP请求模块采用Nodejs提供的request模块,这里提供简单的Get和Post的操作实例。更多的功能详细参考:https://npmjs.org/package/request /** *发起Get请求 */ //获取Http模块 var http = modules.oHttp; //发起Get请求 http('https://www.bmob.cn', function (error, res, body) { response.send(body); }); - /** *发起Post请求 */ //获取Http模块 var http = modules.oHttp; var options = { "url": 'https://api.bmob.cn/1/classes/GameScore', "headers": { 'X-Bmob-Application-Id': 'Your Application ID', 'X-Bmob-REST-API-Key': 'Your REST API Key', 'Content-Type': 'application/json' }, "body":JSON.stringify({"score":1337,"playerName":"Sean Plott"}) }; http.post(options, function(error, res, body) { response.send(body); }); 微信access_token,这里只需要发起一个get请求,地址是这样。https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基础支持&form=获取access_token接口%20/token/** *发起Get请求 */ //获取Http模块 var http = modules.oHttp; var url ="https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=基础支持&form=获取access_token接口%20/token"; //发起Get请求 http(url, function (error, res, body) { response.send(body); });不到10行代码,我们就可以拿到微信开发必备的access_token,access_token微信是有次数限制的,当然不能这么每次获取使用, 这样只要请求次数多,每月必定超出微信给的次数。 微信官方说:access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效, 那我们就给这个函数的结果保存到数据库,做个定时任务2小时执行一次。然后需要时读取数据库,这样就不会担心超了。第三步:access_token保存数据库我们在控制台建一个WeiXin_access_token表,增加access_token字段,里面随便增加一条记录,拿到id,用来更新这条记录。当然你也可以把每次获取的access_token插入到这个表,需要的时候获取到最新的一条。云函数数据表操作文档:http://doc.bmob.cn/cloud_function/web/develop_doc/#_9function onRequest (request, response, modules) { //获取数据库对象 var db = modules.oData; //这里放到表里的ID var objectId = 'NJEi333B'; //http请求方式: GET var appid = 'wxd1b8c236059cd569'; var secret = 'xxxxxxxxx'; var url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + appid + '&secret=' + secret; //获取Http模块 var http = modules.oHttp; //发起Get请求 http(url, function (error, res, body) { if (!error && res.statusCode == 200) { //写入数据库 var resultObject = JSON.parse(body); //如果返回错误则打印 if (resultObject.errcode) { response.send(resultObject); } //更新到数据表 db.update({ "table": "WeiXin_access_token", "objectId": objectId, "data": { "access_token": resultObject.access_token } }, function (err, data) { response.send("success" + data); }); } }); //获取微信access_token END }第四步:读取access_token暴露给其他平台调用新建个空白云函数,里面编写一下代码function onRequest(request, response, modules) { //数据库对象 var db = modules.oData; //查询一条数据 db.findOne({ "table":"WeiXin_access_token", "objectId":"NJEi333B" },function(err,data){ //JSON打印给客户端 response.send(data); }); } 这里是代码的执行结果,需要预览,可以打开一下链接。http://cloud.bmob.cn/3fbee3a417249ddf/token一样不到10行代码,即可暴露access_token给其他平台调用。总计不到20行代码,不需要10分钟,就可以实现微信整个access_token的维护,与暴露给其他平台使用。最后还有一个关键问题, 2小时自动刷新access_token。第四步:自动刷新access_tokenBmob平台云函数支持liunx下面的crontab语法定时任务,当然国内其他公司的云函数也是支持定时任务的,具体看开发文档。http://doc.bmob.cn/cloud_function/web/timing_tasks/总结:我们可以看到Serverless的Faas 开发微应用,开发效率比传统自己购买云主机,云数据库。高出很多倍。以至于国内这2年,阿里、腾讯、华为等云厂商都推出了自己的Faas 服务。大家都可以去体验一下,你只需要关系业务代码,不再需要去了解框架、运维、底层相关技术。
2020年07月19日
8,979 阅读
12 评论
49 点赞
1
...
8
9
10
...
25