prometheus

云原生监控系统 Prometheus 入门

Prometheus 是一个开源监控系统,它前身是 SoundCloud 的告警工具包。从 2012 年开始,许多公司和组织开始使用 Prometheus。该项目的开发人员和用户社区非常活跃,越来越多的开发人员和用户参与到该项目中。目前它是一个独立的开源项目,且不依赖于任何公司。为了强调这点和明确该项目治理结构,Prometheus 在 2016 年继Kurberntes 之后,加入了 云原生计算基金会(Cloud Native Computing Foundation)。 本文内容来源于 实验楼 课程 楼+ Linux 运维与 DevOps

  • 天火
    天火
15 min read
netty

Netty 高性能网络协议服务器开发

本文通过一个实例来讲解如何使用 Netty 框架来开发网络协议服务器,项目使用 Gradle 工具来构建和运行,并且支持 Docker 部署。项目代码已在 GitHub 开源,JW Netty Demo。 Netty 简介 Netty 是一个异步、事件驱动的网络应用框架,使用它可以快速开发出可维护良好的、高性能的网络协议服务器。它大幅简化和流程化了网络编程,比如 TCP 和 UDP 套接字服务器开发。难能可贵的是,在保证快速和易用性的同时,使用 Netty 开发的应用并没有丧失可维护性和性能。

  • 天火
    天火
9 min read
tornado

Tornado API 服务开发

本文讲述如何使用 Tornado Web 框架来开发一个简单的 API 服务,以及如何使用 Docker 工具来构建镜像和部署服务。项目代码已在 GitHub 开源,JW Tornado Demo。 Tornado 介绍 Tornado 是一个 Python Web 框架,同时也是一个异步网络库。通过使用非阻塞网络 IO,它可以轻松处理上万连接,这使得它非常适合长轮询、WebSockets,以及需要为每一个用户维护一个连接的应用。 Tornado 还实现了 HTTP 协议的客户端(

  • 天火
    天火
11 min read
git

Git + Docker 多环境自动化部署

日常项目开发过程中,一般都有多套环境,比如开发、测试和生产。各个环境部署的代码版本不一致,手动一个个来部署效率低且容易出错。如果项目采用了敏捷开发方式,可能每天需要部署几十次。手动方式更加不可行,因此必须要把多环境的部署工作自动化。本文将介绍在笔者参与项目中实际推行的一种方案,供大家参考。 整体方案 当开发人员 push 代码到 develop、release 和 master 分支时将自动触发构建 Docker 镜像,然后部署到分支对应的开发环境。 Git 分支模型 每套环境部署的代码版本都不一样,还在开发中的功能只能部署到开发环境,已经开发完成的功能可以部署到测试环境,测试通过的功能才能部署到生产环境。依托于 Git 强大的分支功能,

  • 天火
    天火
8 min read
react native

React Native跨平台移动应用开发实战 - 打包发布

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用打包和发布到应用市场。 iOS打包 发布到AppStore 安卓打包 发布到GooglePlay和国内安卓市场 iOS打包 在Xcode 8里就可以完成打包和上传安装包到AppStore,但在打包之前需要到Apple开发者网站配置好证书、应用信息和Provision文件等。 打开 Apple Developer 网站,选择“Account”,然后选择“Certificates, Identifiers & Profiles”,就能看到如下界面。 在这里需要完成以下几项任务: 在Certificates下创建Distribution证书 在Identifiers下新建一个App ID 在Provisioning Profiles下为Distribution创建配置文件 以上配置完成后,打开Xcode

  • 天火
    天火
3 min read
react native

React Native跨平台移动应用开发实战 - 首页

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解首页如何开发。首页相对来说比较复杂,用到了RN的 ScrollView 和 ListView 组件。学完首页后,其它页面类似,因此关于功能开发方面的讲解到此结束。 RN的ListView在ScrollView的基础上做了很多性能优化,以保证在列表项非常复杂和列表很长的时候仍然能够保证页面滚动的流畅性。当然与此相伴,在使用上也会更复杂。 在页面里引入ListView组件。 在componentWillMount里创建ListView的DataSource,注意必需指定rowHasChanged来帮助ListView判断列表项是否需要重新渲染。 在componentWillReceiveProps里更新DataSource,否则即便数据发生了变化,列表也不会更新。 下拉刷新的时候,在列表上方显示Loading图标。 在列表滚动到结尾时,加载更多数据。 首页组件挂载后,获取列表数据,刷新导航。因为导航里的城市和运动信息可动态修改,所以需要刷新导航来动态生成,而不是由Layout来生成固定的。

  • 天火
    天火
1 min read
react native

React Native跨平台移动应用开发实战 - 注册登录

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解用户注册和登录。由于篇幅所限,后面关于功能的讲解中我们重点关注component部分的代码,container、action和reducer代码请查阅Github上的公开库 zqc-app-demo。 注册登录选择页 注册 登录 注册登录选择页 启动时如果检测到没有登录,则进入此页让用户选择注册新帐号还是使用现有帐号登录。退出登录后也应进入此页。 注册 为了避免让用户反感注册过程中填写资料,应尽量减少必填信息,并且分步骤让用户填写,而不是在一个页面中填写完所有,从视觉上让用户觉得轻松一些。对于移动应用来说,最好使用手机号注册,方便日后联系用户。如果使用手机号注册,需要验证手机号的真实性。 有关表单数据校验、网络请求和缓存方面的技术资料可阅读前一篇文章 React Native跨平台移动应用开发实战 - 数据同步。

  • 天火
    天火
3 min read
react native

React Native跨平台移动应用开发实战 - 数据同步

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用和服务端之间如何同步数据。一方面应用里用户输入的数据需要提交到服务端,另一方面应用也需要从服务端获取其他用户提交的数据。涉及的工作包括表单数据验证,请求服务端API,缓存服务端响应数据等。这些是纯技术层面的工作,不涉及具体业务逻辑,但却是后面业务逻辑开发工作开展的前提。 表单数据验证 请求API 缓存数据 表单数据验证 以登录页面为例,表单数据验证效果如下。在用户输入的同时,会实时验证输入数据。如果验证失败,将在导航栏下方给予提示。这种验证方式比提交数据后由服务端来验证并反馈给用户在体验方面更好。当然处于安全考虑,服务端数据验证仍然需要。 在用户输入过程中,监听变化,如果数据发生变化则调用saveInput来保存新数据。保存数据的同时会调用validateInput来验证数据,验证结果保存在store的error.input属性下。 如果验证结果不为空,表示输入有误,

  • 天火
    天火
3 min read
react native

React Native跨平台移动应用开发实战 - 启动

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用的启动,启动需要完成检测网络、获取位置、加载持久化数据、检查登录状态等工作。 入口 Store创建与持久化 引导页 入口 入口文件负责store的创建和加载路由,然后就进入路由里定义的初始页,也就是引导页Bootstrap。可以看到iOS和安卓的入口文件内容一样,都是调用setup来完成。setup里创建store,并加载路由,然后应用就进入到引导页。 Store创建与持久化 Redux的store支持通过插件来扩展其功能。 我们使用 Logger for Redux 来打印每个action及其作用前后的状态,方便出现问题时分析到底是哪个action引起。 另外还使用了 Redux Persist 来持久化store到存储,以便应用重启后能恢复到上次退出时的状态,

  • 天火
    天火
3 min read
react native

React Native跨平台移动应用开发实战 - 布局和导航

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解应用整体层面的一些东西,包括布局、导航,以及错误、进度、Loading等信息显示。 布局 导航 进度提示 Loading 错误提示 布局 先来看一下完整的布局是怎样的一个效果。如下图所示,最顶部是状态栏和导航,下方紧接着的是进度条(有后台任务处理时出现,比如图片压缩),然后是内容区,页面中间是Loading图标(表明有网络请求正在进行),偏下方的位置是错误信息(出错时才有),最底部是Tab栏。 一个好的布局既要灵活满足不同页面的需求,比如有的页面没有导航条,有的没有Tab栏,还能尽量让页面不关心这些全局的界面元素。一个应用里的页面尽量使用同一个布局,这样能避免许多重复性的工作,

  • 天火
    天火
3 min read
react native

React Native跨平台移动应用开发实战 - 技术栈

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,介绍RN应用开发用到的各项技术。读者在进行RN应用开发前,需要掌握这些技术。RN应用开发里面,RN只负责UI的绘制和跟原生系统的通信,对于一个完整的应用来说,还有许多技术层面的东西需要考虑,包括导航、应用状态管理和持久化、数据缓存、网络请求、错误处理等。 JavaScript Flexbox Layout React Redux 项目结构 JavaScript RN使用的JS引擎(下文提到引擎时如无特别说明即为该引擎)为Safari浏览器使用的引擎,当在Chrome浏览器里远程调试时,既然是运行在浏览器里,那就当然是V8引擎了。这两个引擎支持的JS语言特性非常相似,但也不排除会遇到两者行为不一致的地方,开发过程中应当避免使用这些特定于平台的特性。完整的说明详见官方文档,JavaScript

  • 天火
    天火
5 min read
react native

React Native跨平台移动应用开发实战 - 搭建开发和调试环境

本文隶属于文章系列 React Native跨平台移动应用开发实战 ,讲解RN开发和调试环境的搭建。开发和调试环境的易用性对后续的工作效率影响很大,值得花时间来准备。由于笔者是Mac电脑,因此下文如无特别说明,都是在Mac OS X环境下的操作。 安装开发工具 在设备上运行 Dev域名配置 Debugging 安装开发工具 RN开发工具包括: node 运行打包服务Packager及各种JS工具 watchman 检测文件修改 react-native-cli RN命令行工具,功能包括启动Packager、在模拟器或设备上运行应用、链接原生组件库、打印应用日志、打包发布包等 Xcode iOS应用开发IDE Android Studio 安卓应用开发IDE

  • 天火
    天火
5 min read
react native

React Native跨平台移动应用开发实战 - 开篇

React Native介绍 React Native (简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的UI框架 React 在原生移动应用平台的衍生产物,目前支持iOS和安卓两大平台。RN使用Javascript语言,类似于HTML的JSX,以及CSS来开发移动应用,因此熟悉Web前端开发的技术人员只需很少的学习就可以进入移动应用开发领域。 RN运行时包含一个原生主线程和一个JS线程,JS线程执行JS代码,负责界面布局和业务逻辑处理,原生线程负责界面渲染和原生功能执行。RN尽量使用原生组件(现有原生组件经过封装后可在JS里调用),以避免重复造轮子。这样有很多好处,一是可以利用现有的大量的原生组件;二是可以达到跟原生组件一样的性能;三是通过JS封装过后的组件可以支持跨平台。 JS在RN里面的作用类似于Python这样的支持调用原生C库的脚本语言,都是起着“胶水”的作用。复杂计算和系统功能通过调用原生接口来完成,流程控制和业务逻辑则在“胶水”语言里完成。

  • 天火
    天火
3 min read
docker

Go + Docker API服务开发和部署 - 部署篇

本文是 Go + Docker API服务开发和部署 文章系列的“部署篇”,主要讲解如何使用Docker来搭建开发和测试环境,以及部署应用到生产环境。 Docker简介 使用Docker来打包应用镜像 使用Docker Compose来部署应用及其依赖服务 使用Docker Machine来管理容器主机 使用Docker来管理测试环境 Docker简介 相信很多开发和测试人员都遇到过搭建环境的问题。新的开发人员加入团队需要花费一两天甚至更长时间来搭建一套完整的开发环境。测试人员搭建测试环境同样如此,并且如果想再多搭一套来做压力测试,又得重复一次,非常的枯燥和无趣。有没有可能使用一个标准的环境搭建脚本就能把应用及其依赖服务都Run起来?如果使用传统的脚本编写方式,很困难。每个人的工作环境千差万别,比如有的用Windows有的用Mac,脚本很难做到一次编写到处运行。并且编写脚本的人需要知晓所有应用和服务的部署细节,工作量很大。如果只有一台服务器,还要想法应对多套环境的端口、路径等系统资源冲突的问题。

  • 天火
    天火
12 min read
go

Go + Docker API服务开发和部署 - 测试篇

本文是 Go + Docker API服务开发和部署 文章系列的“测试篇”,主要讲解如何使用Goconvey来进行单元测试、Model测试和API测试。 Goconvey介绍 单元测试 Model测试 API测试 Goconvey介绍 Go内置了“testing”包用来做单元测试和性能测试。Goconvey 核心也是使用“testing”包,但增加了行为测试、丰富的测试断言、WebUI、自动监测更新等功能,有效提升了测试开发效率和体验。 单元测试 先来看看不依赖外部环境的单元测试如何编写,借此了解Goconvey的用法。 单元测试示例: // test/add.go package

  • 天火
    天火
7 min read
go

Go + Docker API服务开发和部署 - 开发篇

本文是 Go + Docker API服务开发和部署 文章系列的开发篇,主要讲解如何使用Go来开发一个适用于生产环境的API服务。 API服务功能介绍 Echo Web框架简介 代码目录结构 MVCS模式介绍 使用Godep来管理依赖 使用Viper来管理配置 使用Cobra来管理子命令 使用Logrus来打印日志 Model层实现 Service层实现 Controller层实现 使用Supervisor来管理服务进程 使用Fswatch来自动部署代码更新 打印完整的请求和响应来辅助调试 API服务功能介绍 本文里我们要实现的API服务功能为几乎每个网站或移动应用都需要的用户系统功能,包括注册、登录、编辑资料和查询信息等接口。数据传输使用HTTP协议,响应结果为JSON格式。 Echo Web框架简介 Echo 是一个Go的Web Server

  • 天火
    天火
24 min read
go

Go + Docker API服务开发和部署 - 开篇

为什么选择Go + Docker 笔者之前的项目开发主要使用Python。Python的优势在于简洁强大的语法,丰富的库包,以及极高的开发效率,而劣势在于通过解释器执行使得性能不够理想,缺少类型检查导致代码质量难以保证,全局锁的存在限制了并发性能,此外缺乏对并发编程的良好支持。这些劣势正好是Go的优势。虽然在开发效率上Go跟Python还有差距,但相比于其它静态类型语言,Go已经有很大提升了。 此外,笔者之前的项目部署主要使用virtualenv(Python 2)和pyvenv(Python 3)来创建独立的应用环境,Supervisor来管理应用进程,Fabric来编写自动化发布脚本。部署应用一键完成,已经能较好满足大多数项目的部署需求。不过不太满意的是,每次新增服务器都要重复进行配置系统,安装软件,优化系统参数等工作,如果要迁移到其它机房或云服务则会更麻烦。问题的根源在于,这种部署方式仅仅把应用依赖的语言库包跟应用一起打了包,

  • 天火
    天火
3 min read