我们真的需要微服务吗?

什么是微服务? 微服务是很小的,但是又能够独立部署的服务。 微服务的优点 1.不同的服务可以使用不同的语言和技术来实现 2.提供服务可用性,当其中一个服务不能正常工作,可以通过多实例或者服务降级来维持着 3.扩展性好,某些特别需要资源的服务可以专门提供更多的资源来支撑 4.部署简单,如果是单体应用,修改一行代码都需要整个工程重启 5.因为微服务的每个服务都很小,所以修改起来十分轻松,并且重构都是简简单单的事情 微服务的缺点 1.技术门槛提高了,因为你要面对分布式的问题 2.总体部署也变得复杂了,因为你多个服务可能需要不同的环境,你还要为其提供必需的运行环境 3.需要考虑服务间通讯的可靠性和稳定性,网络并不是十分可靠的 4.

  • yubang
6 min read

mysql入门笔记

数据类型 数值类型 tinyint:整数,有符号-128到127,无符号0到255 smallint:整数,有符号-32768到32767,无符号0到65535 mediumint:整数,有符号-8388608到8388607,无符号0到1677215 int:整数,有符号-2147483648到2147483647,无符号0到2147483647 bigint:整数,有符号-9233372036854775808到9223372036854775807,无符号0到18446744073709551615 float:浮点数,float(M, D)表示,M代表总长度,D代表小数点后面长度 double:浮点数,double(

  • yubang
1 min read

微信小程序播放缓存的音频文件

很多时候我们都想把数据预先缓存到本地,节省带宽。但是最近在处理微信小程序播放缓存到本地的音频文件的时候,遇到一些小问题,然后对于安卓和IOS需要采用不同的播放策略。 首先,如果哪怕用audio标签来播放在线的音频文件,假如服务端没有实现断点续传,IOS是无法播放的,这个需要注意。 对于缓存在小程序的音频(wx.saveFile(OBJECT)保存的音频),IOS只能通过播放背景音乐的接口播放,其它播放方法都没有成功实践,而对于安卓,内部 audio 上下文 innerAudioContext 对象即可播放。给出代码: var res = wx.getSystemInfoSync() if (res.platform == 'ios') { this.

  • yubang
1 min read

微信小程序录音与播放录音

小程序中提供了两种录音的API 旧版录音功能 首先启动录音,然后停止录音即可拉到音频的临时地址 启动录音: var that = this; wx.startRecord({ success: function (res) { // 调用了停止录音接口就会触发这个函数,res.tempFilePath为录音文件临时路径 var tempFilePath = res.tempFilePath that.setData({ src: tempFilePath }) }, fail: function (res) { //录音失败的处理函数 } }) 停止录音: wx.stopRecord() 播放录音: wx.

  • yubang
1 min read

企业微信(服务商模式)oauth

概念 由于这种模式多了很多稀奇古怪的概念,首先我们来理一理这个概念。 三种token 企业接口的token 应用授权的token 服务商的token 参考文档:https://work.weixin.qq.com/api/doc#11791 各种ID CorpID:整个企业微信的ID SuiteID:服务商新建的每一个应用特有的ID Secret:服务商新建的每一个应用特有的Secret 构造登录URL 做过oauth的同学都知道,oauth登录的第一步是引导用户到第三方服务器,然后用户确认授权登录(或者静默授权)之后,跳转回自己的服务器,同时带上code这个参数值。 企业微信服务商构建url的文档地址在: https:

  • yubang
4 min read
kubernetes

k8s拉取私有仓库镜像

首先k8s要主动拉取私有仓库则需要配置secret 只需要一条命令 kubectl create secret docker-registry {secret名字} --docker-server={仓库地址} --docker-username={你的账号} --docker-password={你的密码} --docker-email {你的邮箱} -n {命名空间} 当然在创建pod的yaml文件也需要指定secret,直接上例子 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-app namespace: uread spec: replicas: 2 template:

  • yubang
1 min read
kubernetes

安装kubernetes-dashboard管理k8s集群

首先我们知道k8s功能十分强大,但是我们要学习它很多命令其实还是不够友好,所以需要一个web ui控制台来管理。 安装仅需要两个yaml文件 安装前提是已经安装好k8s 编写文件a.yaml(10.104.241.122改成自己的k8s的ip) apiVersion: extensions/v1beta1 kind: Deployment metadata: # Keep the name in sync with image version and # gce/coreos/kube-manifests/addons/dashboard counterparts

  • yubang
1 min read
kubernetes

在centos7上安装配置k8s集群

配置背景介绍 为什么要用kubernetes这么复杂的docker集群管理工具呢?一开始接触了docker内置的swarm,这个工具非常简单快捷的完成docker集群功能。但是在使用docker1.13内置的swarm做集群的时候遇到vip负载均衡没有正确映射端口到外网,或者出现地址被占用的情况,这对高可用性的需求是不利的,然而又没找到一个解决方案,只能转投k8s。 实验环境 腾讯云 centos7.3 64位 安装 yum-config-manager --add-repo https://docs.docker.com/v1.13/engine/installation/linux/repo_files/centos/docker.repo yum

  • yubang
3 min read

docker使用小技巧

docker是持续构建应用交付的一大利器也,但是要使工具发挥最大的功效还需要知道一些小技巧。 为了更好的使用docker,建议升级到1.13。注意,该建议仅为个人观点,并且是写于2017年9月3日。(下面命令皆基于1.13) # 升级指令(centos7测试过) yum-config-manager --add-repo https://docs.docker.com/v1.13/engine/installation/linux/repo_files/centos/docker.repo yum makecache fast yum -y

  • yubang
3 min read

生产环境docker历险记

首先感谢产品狗jinkey(https://jinkey.ai/)把他的服务器托付给我部署应用,下面讲一下最近在生产环境使用docker惊心动魄的经历。 docker是双面刃 你爱的人往往伤你最深,docker的环境隔离,快速交付,持续构建支持等优势往往让人爱不惜手,但是越依赖于docker的时候,你却会发现越来越无助,因为高级的资料真的不好找。 环境隔离分析 首先我们来看一下docker环境隔离的实现原理,其实本质是利用linux系统的进程命名空间隔离进程。本身linux系统只有一个命名空间,每个命名空间下面可以有很多进程树。但是当新建了一个命名空间之后,该命名空间下的进程不能知道其它命名空间的进程,所以达到了隔离进程的目的。但是注意命名空间同级进程可以知道命名空间下的进程,这也是我们在系统输入ps aux可以看到docker容器跑起来的进程。 参考:http://blog.csdn.net/tongtest/article/details/

  • yubang
8 min read

chrome插件开发实践

首先我们来看一下chrome能做什么事情,其实主要的功能是往页面注入一段js代码,修改浏览器外观和获取浏览器内部信息。 chrome插件生命周期 浏览器打开时执行一次的js代码 每打开一个页面执行的js代码 点击浏览器上插件按钮,打开一个页面,执行的js代码 开发chrome插件的准备工作 一个文本编辑器即可 一个hello world工程 新建一个文本文件:manifest.json 内容如下: { "manifest_version": 2, "name": "优读Uread网页版插件", "version": "1.

  • yubang
2 min read

Uread 自动化运维平台实践

首先技术并没有好坏之分,只能说一种技术在特定场景会优于另一种技术。 首先uread优读(http://aiuread.com/)作为一个还处于起步阶段的团队,那么没办法造出像大企业他们那种自动化运维平台,真实情况是连用OpenStack来管理应用都是一种高难度活。 第一阶段,单体应用,纯人力部署 团队一开始,反正后端就一个系统,然后又是用git作为团队内部的协作工具,部署理所当然是直接每次发布新版本,直接执行git pull,然后执行一个封装好kill进程,重启进程的shell脚本,接着更新版本流程完成。 第二阶段,服务拆分,交互遇到问题 随着功能越来越多,后端前端的同学也越来越多,以前一个工程囊括整个项目的做法的弊端开始显露出来。首先,由于工程膨胀,要一位新来的同学看懂整个工程会变得非常困难,并且提交代码的时候冲突会非常严重。现在微服务不是很流行么,所以团队也考虑是不是拆开成微服务呢。

  • yubang
6 min read
IOT

微信IOT与airkiss3的wifi硬件操作实践

最近接触微信硬件平台开发,然后微信扫描连接wifi设备的开发流程只是很简单的,无奈文档实在不多,下面我写一下详细的成功的开发流程。 硬件准备 1台安卓机,1台装有微信的手机(安卓或者ios) 模拟设备制作 假如我们手头上没有wifi硬件设备,我们可以拿一台安卓机来模拟wifi硬件设备,当然要下载一个软件,链接是: http://iot.weixin.qq.com/wiki/doc/sdk/Airkiss3.0_SDK_for_android_20160113_165358.zip 当然这个安装包里面的apk不要直接安装,因为没法直接用来调试,下面会说如何修改源码编译出可用的app。 申请一个测试号

  • yubang
6 min read
java

从0开始编写一个spring boot 应用

为什么要使用spring boot? 入门简单,无需编写大量的xml文件来配置应用 内置tomcat,可以生成直接运行的独立jar文件 简化了spring框架一些繁琐的开发方式,提供很多与第三方库的结合 使用eclipse新建一个spring boot工程 1.先在eclipse官网下载一个eclipse EE 2.new -> Maven Project 3.填写项目信息 ** 安装spring boot依赖 ** 在pom.xml文件添加一点点东西(保存的时候eclipse会自动下载依赖),整个文件如下: <project xmlns="http://maven.

  • yubang
13 min read