
AWS是全球云计算领域的领跑者,它在计算、存储、网络等方面都做出了很多创新,同时也是其他云计算厂商学习及模仿的对象。 阿里云是目前国内市场份额最大的云计算厂商,其份额超过了第二至五位厂商的总和,份额领先优势比AWS在全球还要显著,同时全球份额也超过IBM来到第四。 本文将对AWS和阿里云核心服务做一个简要对比,以及这两家厂商发展方向的一些个人见解。 云计算,其核心服务就是计算、存储及网络。这些基本能力的稳定性,功能完善性决定了云计算厂商能力的下限。 除了上面提到的三大计算机核心组件能力,下面这些能力也是云计算中非常重要的组成部分, 按量计费 资源编排(也就是平台作为代码) 云资源的认证及授权 API 基于上面列举的云计算核心服务和关 …
Read More
Serverless Framework是一个开源命令行工具。他提供函数脚手架、流程自动化、最佳实践等帮助开发、部署跨云厂商的托管无服务器计算服务(官方已支持aws, Azure, GCP, IBM Cloud等各种厂商的无服务器计算)。同时支持使用插件来扩展各种功能,比如支持更多云厂商无服务器计算服务,例如阿里云的函数计算。 这里使用基于函数计算的钉钉回调函数接口示例来演示如何使用Serverless Framework将一个无服务器函数部署到AWS Lambda。 安装servereless后,可以通过serverless create命令创建函数脚手架工程,或者在已有工程的下创建serverless配置文 …
Read More
在基于函数计算的钉钉回调函数接口中使用钉钉回调函数案例实践了AWS Lambda无服务函数。该示例中,我们将自定义的函数代码及依赖的第三方库(比如json处理库jackson, 钉钉openapi加密库, aws dynamodb client等)整体打包为一个部署包,上传到lamdba代码仓库用于函数执行。 然而实际项目中,其实有大量的相关函数可能会共享这些基础依赖库、三方函数库(比如headless chrome(Puppeteer), pandoc, OCR library -- Tesseract等等)或者使用自定义runtime(如官方未支持的java11)的需求。AWS Lambda在去年底发布了Lambda …
Read More这周参加了QCon 2019北京站,这里记录下部分印象深刻的主题以及个人感受。 QCon是由InfoQ主办的综合性技术盛会,主题涵盖了大前端、高可用架构、容器技术、大数据、机器学习等各种热门技术主题。其中也不乏下一代分布式应用、混沌工程等前沿有意思的主题,后面会详细介绍相关的主题演讲。 工程效率提升 这是在QCon第一日个人感兴趣且非常有意思的一个系列主题。无论是创业公司、独角兽企业还是互联网巨头都希望不断提升工程效率,3个相关的分享分别来自BAT,可见互联网巨头们对团队效率提升的渴望和重视。 10倍速原则对工程生产力建设的方向性影响 这个talk来自腾讯的高级顾问乔梁,这位老兄已经连续10年在QCon上分享持续集成、持续交付等工程 …
Read More
上周参加了ArchSummit(全球架构师峰会),在这里记录下部分参加的主题以及个人感受。 会议回顾 今年参加了几次技术会议,微服务、容器技术、区块链、大数据、机器学习以及人工智能都是当下最热门的主题。同样这次ArchSummit绝大部分topics都跟这些主题相关。 这次会议主要参加了两个专场主题,Kubernetes的应用和快手科技技术专题。 基于 Kubernetes 的 DevOps是来自微软Azure的容器工程师分享如何基于 Kubernetes 的 CI/CD 落地实践。该分享中提到了CI/CD各个步骤中都有众多的工具支持,如何选择合适Kubernetes的工具将持续集成和部署串联在一起是Devops中的主要挑战。分享者 …
Read MoreV秘开发团队一直使用着Jenkins CI来持续集成V秘服务的新功能和各种改进。近日,Jenkins CI在重启之后,很多已有任务的配置无法被Jenkins CI完整的加载,导致很多功能无法使用。导致我们整个网站的各种服务无法被升级更新了:-( Jenkins CI在管理控制台列出如下的错误信息,示意现有任务的部分配置由于错误无法加载。 CannotResolveClassException: hudson.plugins.git.GitSCM, CannotResolveClassException: com.cloudbees.jenkins.plugins.BitBucketTrigger, …
Read MoreMongoDB是目前最为流行的NoSQL数据库之一。V秘的后台数据就是保存在MongoDB中的哦;) 尽管MongoDB的性能为业界称道,但任何数据库系统使用中都存在着慢查询的问题。慢查询的性能问题,可能是由于使用非最优的查询语句,不正确的索引或其他配置原因导致的。但开发人员或数据库维护人员首先要找出这些低效的查询,才能做出对应的查询优化。 在MongoDB中实现慢查询的profile是非常容易,因为MongoDB内置了profile开关来记录执行时间触发了profile条件的查询。 参照db.setProfileLevel()的文档,通过以下命令就可以记录执行时长超过300ms的查询。 …
Read MoreSwarm mode在Docker v1.12中正式发布,Swarm mode带来了诸如Docker集群,容器编排,多主机网络等激动人心的特性。V秘团队也尝试着将各种后台服务部署到Docker Swarm Cluster获取更好的弹性计算能力。 Docker v1.12中正式发布的Docker Swarm在我们实用中发现仍有不少不足之处,让我们一一分享给大家。 无法将服务的published端口只绑定到特点的网卡上。比如我们的云主机(同时也是Swarm manager/node)有eth0和eth1两块网卡,分别连接内网和外网。我们计划在Docker Swarm中运行一个nginx服务,通过80/443端口提供HTTP/HTTPS服 …
Read MoreV秘团队一直致力于用技术改善产品。V秘后台的各种服务一直是通过完善的Devops流程自动部署到Docker容器集群。随着Swarm mode在Docker v1.12中正式发布,Swarm mode带来了诸如Docker集群,多主机网络等激动人心的特性。我们也在尝试将V秘服务部署到Docker Swarm Cluster获取更好的弹性计算能力。 然而我们将V秘的服务部署到Docker Swarm Cluster时遇到服务容器无法启动的错误。错误信息类似如下, starting container failed: could not add veth pair inside the network sandbox: could not …
Read More在之前的文章我曾提到基于Angularjs的单页面应用在用户体验上的种种好处。然而任何事情都不是完美的,Angular和类似的框架通过应用内做页面路由的实现给SEO(也俗称搜索引擎优化)带来了不少麻烦。 首先,我们来看看页面内路由是如何实现的。默认Angularjs生成的页面uri类型如下, http://mydomain.com/#/app/page1 浏览器请求上面这个uri的时候,实际发送给服务器的请求地址是http://mydomain.com/, web服务器会将默认的页面响应给浏览器,比如index.html或index.php等。 浏览器返回的页面里面引入了Angularjs和其他应用需要的JS库。Angularjs应 …
Read More