首页 文章 精选 留言 我的

精选列表

搜索[可复现构建],共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 趋势,更关注你落地实践中的遇到的困惑和问题。

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

聊一聊泛型的可空性(kotlin)

什么?泛型本身也可以是nullable?上来就抛这么个问题实在是不够友好~ 首先回顾,什么是泛型?Oracle Java Tutorials Introduced in J2SE 5.0, this long-awaited enhancement to the type system allows a type or method to operate on objects of various types while providing compile-time type safety. It adds compile-time type safety to the Collections Framework and eliminates the drudgery of casting. 泛型的本质是参数化类型,也就是说操作的数据类

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

制作可独立分发的Android模拟器

如果我们编写了一个Android应用程序,想在一台没有Android SDK或者BUILD环境的机器显示给别人看,应该怎么办呢?通常,我们开发Android应用程序的时候,都是使用模拟器来运行程序,要么是SDK环境下,要么是在源代码BUILD环境下使用。在SDK环境下,结合Eclipse和ADT,使用模拟器很方便,而BUILD环境下,也是很简单地使用emulator命令就可以了,具体可以参考在Ubuntu上下载、编译和安装Android最新源代码一文。这篇文章介绍另外一种方法在Windows下环境下使用Android模拟器,它不依赖于SDK或者BUILD环境,可以独立分发和使用。 要运行Android模拟器emulator,只要具备4个系统镜像就可以了,分别是system.img、userdata.img、ramdisk.img和kernel-qemu,这4个文件均可以在从SDK环境中得到,此外,最好还要添加模拟器皮肤和adb工具,这样功能才算完整。以下介绍具体制方法。 一. 下载Android SDK。官方下载http://dl.google.com/android/android-sdk_rXX-windows.zip,XX是指你要下载的版本号,例如我下载的是08。此链接可能已经被和谐,,可以在网上搜索一下,用其它办法下载。下载好之后,运行SDK Manager工具,下载完整的SDK。假设SDK放在D:\android-sdk-windows目录下。 二. 新建一个目录,例如,在D盘下新建目录D:\AndroidEmulator。进入到D:\android-sdk-windows\tools目录下,将emulator.exe拷拷贝到D:\AndroidEmulator中,同时进入到D:\android-sdk-windows\platform-tools目录下,拷贝adb.exe和AdbWinApi.dll两个文件到D:\AndroidEmulator中。注意,有的SDK把adb.exe和AdbWinApi.dll放在D:\android-sdk-windows\tools目录下。 三. 在D:\AndroidEmulator新建目录images,用来存放上面提到的4个系统镜像。例如要制作Android2.1模拟器,则到D:\android-sdk-windows\platforms\android-7\images目录下,把里面的文件全部拷贝到D:\AndroidEmulator\images目录下,D:\android-sdk-windows\platforms\android-7\images目录包含了system.img、userdata.img、ramdisk.img和kernel-qemu这4个文件。 四.在D:\AndroidEmulator新建目录skins,用来存放模拟器皮肤文件。继续以制作Android2.1模拟器为例,到D:\android-sdk-windows\platforms\android-7\skins目录下,把里面所有的文件夹拷贝到D:\AndroidEmulator\skins目录下,D:\android-sdk-windows\platforms\android-7\skins目录包含了模拟器皮肤文件。 五. 启动命令行窗口,进入到D:\AndroidEmulator目录,执行以下命令: D:\AndroidEmulator>start /b emulator.exe -sysdir d:\AndroidEmulator -system images\system.img -data images\userdata.img -ramdisk images\ramdisk.img -kernel images\kernel-qemu -skindir d:\AndroidEmulator\skins -skin HVGA start /b表示在后台运行emulator,其它emulator命令选项请执行emulator -help查看。这样,模拟器就运起来了。 六. 如果要在模拟器上安装APK程序,则执行adb install XXX.apk命令,运行adb install命令时,如果遇到下面输出: D:\AndroidEmulator>adb install Renju.apk * daemon not running. starting it now on port 5037 * * daemon started successfully * error: device offline 不用理会,重新运行,直到提示成功为止。 这样,如果我们编写了一个Android应用程序,想拿到一台没有Android SDK和Android Build环境的机器上显示给别人看,就可以打包D:\AndroidEmulator这个文件夹,再带上你的Android应用程序,就可以显示了,是不是很方便呢。 附我自己制作的一个Android2.1模拟器,可以下载使用: 程序员联合开发网:http://www.pudn.com/downloads367/sourcecode/comm/android/detail1590288.html 新浪爱问:Part-1:http://ishare.iask.sina.com.cn/f/16902616.html Part-2:http://ishare.iask.sina.com.cn/f/16902614.html 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/964510,如需转载请自行联系原作者

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

隐马尔可夫模型的Viterbi解码算法

前言 前面在做自然语言处理时涉及到一些词性标注的工作,一般会使用隐马尔科夫模型(HMM)来实现词性标注,而HMM模型的解码实现算法一般就会使用Viterbi算法。 关于穷举法 HMM模型有多种应用,这里说的是其中一个常见应用,即根据观察序列找到最可能的隐含状态序列。最朴素的想法就是直接穷举所有可能的隐含状态序列,并计算出每个组合成的状态序列的概率,概率最大的那个组合序列即是最可能的隐含状态序列。举个水藻和天气的例子,穷举出所有可能的隐含状态序列的概率,如下, P(dry,damp,soggy | sunny,sunny,sunny), P(dry,damp,soggy | sunny,sunny,cloudy), P(dry,damp,soggy | sunny,sunny,rainy), … . P(dry,damp,soggy | rainy,rainy,rainy),最大值对应的序列即为最可能的隐含状态序列。穷举的路径一共有3t条,可以看到随着序列还有状态数的增加,计算量是非常大的。 Viterbi算法 上面的穷举法需要的计算量很大,为减少复杂度引入Viterbi算法,Viterbi算法要解决的解码问题就是多步且每步多重选择的最优选择的问题。根据下图就能很清晰看到Viterbi的核心思想,随着时刻增加,每个节点都保存了前一时刻所有节点到该节点的最优值的子路径,如图中红色箭头,当前时刻的某一节点可能的路径为上一时刻所有节点到该节点的路径,但我们只保留其中一条最优路径。依次计算完所有步后,最后通过回溯的方法得到整个过程的最优路径。 下面用一个例子说明整个过程,假设有3中状态,序列为t个时刻,p(a1)表示a1节点的值,p(b1)表示b1节点的值,同理其他的节点也一样。对于不同时刻,状态之间的转换概率是不变的,所以p(aa)表示从a状态转移到a状态的概率,不管是从1时刻到2时刻,还是从2时刻到3时刻,都是相同的。同理还有p(ab)、p(ac)、p(ba)…。 t+1时刻节点值的计算公式为pt+1(y)=pt(x)p(xy)其中x,y都属于a,b,c一种状态。 我们计算t=2时刻的p(a)的值,它可能从a1到a2、b1到a2或c1到a2,假如a1到a2这条路径计算出来的p(a)最大,那么就保留该路径。同理分别计算p(b)和p(c)的最大值,保留b1到b2的路径,b1到c2的路径。接着计算t=3时刻的p(a)、p(b)和p(c),最后到达t时刻,计算该时刻最大的p(a)、p(b)和p(c),选择出它们最大的值的节点,再根据保留的上一时刻的路径依次往前回溯,就得到最优的序列。比如ct是最大的节点,那就是ct>ct−1>...>b3>c2>b1即最可能的序列为bcb…cc。 ========广告时间======== 鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。 为什么写《Tomcat内核设计剖析》 ========================= 欢迎关注:

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

AI与物联网结合可引发科技巨变

编者按:本文作者Koshin Mariano在物联网行业有丰富的从业经验。 上周,微软和 Facebook发布了聊天机器人;Google 推出分布式深度学习系统 TensorFlow;Slack 慢慢变成了企业聊天机器人的场所。很多科技媒体网站上大部分都是关于 bot 的文章。大家对物联网(IoT)的宣传频率不断下降,取而代之的是人工智能。Product Hunt 上科技类别中很多热门的新产品都是 bot。 我之前就意识到 AI 与物联网的结合可以引起科技行业的巨变,会从根本上改变社会。公司可以创建 “智能自动化代理”(我个人命名的),AI 可以对现实世界作出反应,并对现实世界中的事情产生影响。 物联网是迈向普适计算的重要一步 目前,关于物联网的大量话题主要围绕可以和互联网连接的产品。烤面包机、牙刷、无人机、传感器和树莓π等。之前,我在一家物联网平台上班,我意识到产品并不是最重要的,而将两个不应该相互作用的产品实现交互,并能自动控制两件产品交互的网络效应是最重要的。 物联网让我们朝普适计算的方向更近了一步。普适计算强调和环境融为一体的计算,而计算机本身则从人们的视线里消失。在普适计算的模式下,人们能够在任何时间、任何地点、以任何方式进行信息的获取与处理。 举个例子:自动驾驶汽车可以利用 Waze 之类的应用程序,获取交通流量信息,然后自动实时规划路线,将你送到目的地。汽车可以观察其他车辆、交通事故、接收新闻和交通状况。 核电站会根据需求监测并调整它所输出的能量,然后进行数据分析,定期维护,这样就不会出现核事故。 自我诊断软件系统可以检查出现错误的应用程序日志,然后在没有人参与的情况下自动修复。 让我们以前面提到的核电站场景为例,除了智能检测、控制所需要的输出量之外,我们也可以增添一种新的功能,如果系统出现了错误,可以作出反应。在这个案例中,我们想让它在过热的时候自动关闭。下面的图片是一个简单的流程图。 安装和工作流 将热传感器和反应器和物联网平台相连。 设定自动化操作,每隔一定时间手机反应器的温度数据(例如每秒、每分、每小时。等) 步骤 2 中设定的自动化操会作将数据发送到我们选择的数据存储区(如 Splunk、ElasticSearch、Hadoop 之类的关系数据库或大数据存储区)。 AI 运行机器学习算法,培训自己对反应器正常操作温度的认知。 设置危急时刻反应器关闭自动化操作,在危急时刻,AI 可以触发关闭反应器。 AI 会不断地将目前在数据存储区读取的传感器数据传递给用于系统故障检测机器学习算法,检测温度是否过高。 一旦检测到异常,立刻自动触发反应器,并将通知发送到操作人员、监察人员和工程师团队。 我们可以在不同的领域和行业使用 AI 和物联网。我们可以监测金融行业的欺诈行为,远程监督患者,等等。不管我们是否做好了准备,AI 都将改变我们的未来。 本文转自d1net(转载)

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

MySQL推出Applier,可实时复制数据到Hadoop

http://labs.mysql.com MySQL复制操作可以将数据从一个MySQL服务器(主)复制到其他的一个或多个MySQL服务器(从)。试想一下,如果从服务器不再局限为一个MySQL服务器,而是其他任何数据库服务器或平台,并且复制事件要求实时进行,是否可以实现呢? MySQL团队最新推出的 MySQL Applier for Hadoop (以下简称Hadoop Applier)旨在解决这一问题。 用途 例如,复制事件中的从服务器可能是一个数据仓库系统,如 Apache Hive ,它使用Hadoop分布式文件系统( HDFS )作为数据存储区。如果你有一个与HDFS相关的Hive元存储,Hadoop Applier就可以实时填充Hive数据表。数据是从MySQL中以文本文件形式导出到HDFS,然后再填充到Hive。 操作很简单,只需在Hive运行HiveQL语句'CREATE TABLE',定义表的结构与MySQL相似,然后运行Hadoop Applier即可开始实时复制数据。 优势 在Hadoop Applier之前,还没有任何工具可以执行实时传输。之前的解决方案是通过Apache Sqoop导出数据到HDFS,尽管可以批量传输,但是需要经常将结果重复导入以保持数据更新。在进行大量数据传输时,其他查询会变得很慢。且在数据库较大的情况下,如果只进行了一点更改,Sqoop可能也需要较长时间来加载。 而 Hadoop Applier则会读取二进制日志,只应用MySQL服务器上发生的事件,并插入数据,不需要批量传输,操作更快 ,因此并不影响其他查询的执行速度。 实现 Applier使用一个由libhdfs(用于操作HDFS中文件的C库)提供的API。实时导入的过程如下图所示: 数据库被映射作为一个单独的目录,它们的表被映射作为子目录和一个Hive数据仓库目录。插入到每个表中的数据被写入文本文件(命名如datafile1.txt),数据以逗号或其他符号分割(可通过命令行进行配置)。 详细信息: MySQL Applier for Hadoop 下载地址: mysql-hadoop-applier-0.1.0-alpha.tar.gz (alpha版本,不可用于生产环境)

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

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

用户登录
用户注册