Zach Ke's Notes

Quick notes


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

项目使用 aws 的 lambda服务来生成s3的缩略图

发表于 2018-08-13 | 分类于 aws 相关 | | 阅读次数:

前因

之前有一个go服务会经常重启,后面看了一下 error log:

1
2
3
4
5
6
7
8
goroutine 1355656 [IO wait, 594 minutes]:
net.runtime_pollWait(0x7fb7417c3b78, 0x72, 0xf)
/usr/local/go1.7.6/src/runtime/netpoll.go:160 +0x59
。。。
uc.airdroid.com/utils.GenS3Thumbnail(0xc42020124a, 0xc, 0xc42044f380, 0x2d, 0xc4218e8dc0, 0x159, 0xc4201e1ab4, 0xc, 0xc42021a000, 0x0, ...)
/data/code/go/src/uc.airdroid.com/utils/thumbnail.go:52 +0x296
created by main.getKeyDownloadUrl
/data/code/go/src/uc.airdroid.com/web/common.go:261 +0x76b

阅读全文 »

记一次因磁盘IO耗尽的mongo事故

发表于 2018-08-10 | 分类于 mongo相关 | | 阅读次数:

故障发生和修复

前段时间有一个服务报警了,后面查了一下,发现是服务连接不上 mongo 导致的, error.log 如下

1
2
SaveChannel error(read tcp 172.26.16.28:21544->172.26.0.8:27017: i/o timeout)
SaveChannel error(read tcp 172.26.16.28:22848->172.26.0.8:27017: i/o timeout)

这个服务中我们mongo配置的是副本集设置,也就是说,如果主副本集挂掉的话,会自动选举次副本集。刚开始以为是这台primary mongo挂掉了,但是看了一下,好像服务是正常的,而且 telnet 是可以通的。

阅读全文 »

项目的mongo优化(二) -- 设置副本集集群

发表于 2018-08-10 | 分类于 mongo相关 | | 阅读次数:

前言

通过项目的mongo优化(一) -- 设置主从 我们知道,mongoDB官方已经不建议使用主从模式了,替代方案是采用副本集的模式。
而且主从架构还有几个问题确实不好解决,比如 主节点挂了能否自动切换连接?目前需要手工切换。

阅读全文 »

项目的mongo优化(一) -- 设置主从

发表于 2018-08-10 | 分类于 mongo相关 | | 阅读次数:

前言

之前有一个项目, mongo 存放的库非常大, 单单一个collection 就有 80G, 有几千万条数据。所以后面打算对 mongo 做优化。 刚开始是打算增加主从架构。
1

阅读全文 »

google iap webhook 接入(2) - 项目接入GCP webhook

发表于 2018-08-09 | 分类于 支付相关 | | 阅读次数:

前言

通过 google iap webhook 接入(1) - 初试 GCP pubsub功能 可以知道 GCP 怎么使用 pub 和 sub 的功能来进行推送和拉取。
本节主要是结合我们的支付项目,为 google iap 接入 webhook。
官网的文档写的还算比较清楚: 官方文档

阅读全文 »

google iap webhook 接入(1) - 初试 GCP pubsub功能

发表于 2018-08-02 | 分类于 支付相关 | | 阅读次数:

前言

之前我们的产品有接入google的内购支付,即 google iap,但是google iap不同于Paypal,Stripe 这种第三方支付,像Paypal, Stripe 这种第三方支付在支付成功之后,后面会发送webhook给服务端。然后服务端就可以根据webhook的信息来判断有没有支付成功,其他的事件比如订阅续费,取消循环,退款等等,也会通过webhook来通知服务端,服务端就可以根据相应的事件去处理。
但是google iap本身没有提供这种webhook,所以刚开始我们在接入的时候,除了在服务端做当下的支付校验之外,还需要有一个 Golang 服务去定时跑这些订阅,比如哪些订阅被取消,哪些订阅有续费,就是去轮训google的接口来得到信息,然后比对数据库的信息,来判断当前的订阅是否还有效,以及当前的订阅是否有续费。这样其实很麻烦。
后面看了一下iap的文档:具体文档, 发现通过 Google Cloud Platform (GCP) 我们就可以做到类似于 webhook 接口效果。

阅读全文 »

web站点 开放第三方API流程(7) - 嵌入包含广告的第三方iframe

发表于 2018-08-01 | 分类于 前端相关 , web站点 开放第三方API流程 | | 阅读次数:

我们都知道,google的广告在 ip地址下其实是显示不出来的,那么我们怎么在ip地址下的页面显示google的广告呢?
很简单,把google的广告部署在线上,然后作为一个iframe嵌入到你的ip地址的页面去。这样就可以正常显示了。
这时候所有的配置项都可以作为参数放到url上。 具体实作如下:
以下是子页面的所有的代码:

阅读全文 »

web站点 开放第三方API流程(6) - 父页面的sdk详解

发表于 2018-08-01 | 分类于 前端相关 , web站点 开放第三方API流程 | | 阅读次数:

通过 web站点 开放第三方API流程(5) - demo的sdk详解 可以知道 demo 中 sdk 的运行逻辑了。本节主要是完整的列一下 父页面的 sdk的 js,该讲的,前面就讲完了
由于开放的方法比较多,我这边就不所有的代码都列出来了。只简单列几个:

阅读全文 »

web站点 开放第三方API流程(5) - demo的sdk详解

发表于 2018-07-31 | 分类于 前端相关 , web站点 开放第三方API流程 | | 阅读次数:

通过 web站点 开放第三方API流程(4) - demo的架构详解 可以知道demo这个模块的基础架构。 那么这次主要讲sdk这部分的内容。其实sdk这部分的逻辑,其实在前面的几次讲解中,都讲的差不多了,不过那些都是一些概念,这次着重分析代码。
首先以下4个文件,就是整个sdk的内容,当然后续给第三方服务的,就是合并起来并压缩的一个js文件,现在为了便于分析,就分成4个js比较好区别:

阅读全文 »

web站点 开放第三方API流程(4) - demo的架构详解

发表于 2018-07-31 | 分类于 前端相关 , web站点 开放第三方API流程 | | 阅读次数:

本篇主要是围绕着这个 demo 来做进一步的讲解。 再看一下这个demo的截图:
1

阅读全文 »

web站点 开放第三方API流程(3) - web api 的设计

发表于 2018-07-26 | 分类于 前端相关 , web站点 开放第三方API流程 | | 阅读次数:

通过 web站点 开放第三方API流程(2) - 详解 jschannel 我们知道了iframe和父页面通信的方式。那么接下来就要描述下 具体 web api 要怎么设计。

一个Iframe对应一个channel,并且具有唯一性

首先肯定一个iframe要对应一条单独的channel,所以channel通道肯定是要唯一的。针对这一点,那就是在初始化模块的时候,就初始化一个新的channel给新的iframe。
这时候在父web站点的加载iframe的代码如下, IframeApp.js:

ps: 下面有一些代码跟父站点有上下文关系,如果没有特意说明,说明无关紧要,可以直接无视

阅读全文 »

web站点 开放第三方API流程(2) - 详解 jschannel

发表于 2018-07-25 | 分类于 前端相关 , web站点 开放第三方API流程 | | 阅读次数:

本节主要是围绕这个 web站点 开放第三方API流程(1) - 简介 中的那个 demo演示模块 来介绍。既然是iframe两个不同域之间的通信,那么就要用到一个html5知识 – postMessage。

postMessage

平时做web开发的时候关于消息传递,除了客户端与服务器传值还有几个经常会遇到的问题:

  • 页面和其打开的新窗口的数据传递
  • 多窗口之间消息传递
  • 页面与嵌套的iframe消息传递
  • 上面三个问题的跨域数据传递
阅读全文 »

web站点 开放第三方API流程(1) - 简介

发表于 2018-07-25 | 分类于 前端相关 , web站点 开放第三方API流程 | | 阅读次数:

之前在做一个web项目的时候,有做了一个针对该项目开放的第三方平台。 说是第三方平台,其实也不太对,没那么高大尚。 简单的来说,就是开放这个web项目的一些内部API, 并用来给一些内嵌在该web站点的页面调用。让其获取该站点的相关信息和方法, 甚至可以通过这些API来调用所连接手机所提供的一些接口服务,比如打开google play,安装apk等等。
有做的其中一个例子就是有内嵌了一个第三方服务的第三方页面,然后提供他们一个sdk js文件,并提供了一些方法:

阅读全文 »

浅谈之-js的作用域和变量提升

发表于 2018-07-24 | 分类于 前端相关 , 前端浅谈系列 | | 阅读次数:

前言

最近有在面试前端的人,刚好经常有问了一下关于js的作用域和变量提升,结合网上的一些资料,我这边按照自己的理解总结了一下。

JS 的变量作用域

引用术语,就是:

作用域(Scope)即代码执行过程中的变量、函数或者对象的可访问区域,作用域决定了变量或者其他资源的可见性;计算机安全中一条基本原则即是用户只应该访问他们需要的资源,而作用域就是在编程中遵循该原则来保证代码的安全性。除此之外,作用域还能够帮助我们提升代码性能、追踪错误并且修复它们。


JavaScript 中的作用域主要分为全局作用域(Global Scope) 与 局部作用域(Local Scope) 两大类

阅读全文 »

VerneMQ 搭建桥接尝试(尝试失败,官方bug,待修复)

发表于 2018-07-23 | 分类于 webrtc相关 | | 阅读次数:

前言

通过webrtc 的 signal 服务器 VerneMQ 的集群设置 我们已经对VerneMQ建立了集群了, 实现了分布式扩展。 但是后面又发现了另一种比较好的分布式扩展方式,那就是Bridge,也就是桥接的方式。

  • 所谓的集群,其实是每一个点,都有集群中的其他点的信息,相当于复制了一份主题树和路由表到其他的节点。
  • 桥接其实只按照桥接规则转发,本身是不存储其他节点的信息的。

所以后面参考的架构就是,每个区都有一两个节点作为桥接点,然后统一连接到集群上。

1
2
3
4
5
6
             -------------             -----------------
Sensor ----> | node | --Bridge--> | |
------------- | VerneMQ |
------------- | Cluster |
Sensor ----> | node | --Bridge--> | |
------------- -----------------

阅读全文 »

VerneMQ 通过设置 webhook 来获取每次连接的各个事件节点

发表于 2018-07-15 | 分类于 webrtc相关 | | 阅读次数:

之前在一个 webrtc 的项目中,使用VerneMQ作为signal服务器进行通信的时候,发现每次连接的log都很难去跟进。而且 VerneMQ 的console.log 只能打出运行的一些基本状态,没法打印出每次连接的每一个事件节点的log,比如 pub 和 sub 之类的事件。
后面看来一下官方的文档 webhookplugins 才发现可以通过设置webhook来得到每一次连接的各个事件节点。

操作流程:

首先是将 配置的这个打开:

1
plugins.vmq_webhooks = on

然后刚开始测试的时候,可以动态添加:
1
2
[kbz@VM_16_13_centos ~]$ sudo vmq-admin webhooks register hook=on_deliver  endpoint="http://xxx.airdroid.com/mqtt/webhook"
Done

注意,这样添加的好处,就是进程不需要重启,就可以生效。但是缺点就是 如果进程重启了,那么这些设置就都没有了。
如果要想持久化,就要添加到 vernemq.conf 这个文件里面。因为我们只是测试,所以先不需要添加到 vernemq.conf 文件中。

阅读全文 »

浅谈之-浏览器缓存

发表于 2018-07-05 | 分类于 前端相关 , 前端浅谈系列 | | 阅读次数:

这次主要想讲一讲浏览器缓存的一些事,因为平时我在面试中也会问关于浏览器缓存的一些问题,所以我结合网上的一些资料再加上自己的见解,再老生常谈一下这个问题。

缓存对于前端的优化

在前端开发中,性能一直都是被大家所重视的一点,然而判断一个网站的性能最直观的就是看网页打开的速度。其中提高网页反应速度的一个方式就是使用缓存。一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷。
缓存之于性能优化:

  • 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影响网站交互的前提下可以大大加快网站加载速度。
  • 降低服务器压力:在大量用户并发请求的情况下,服务器的性能受到限制,此时将一些静态资源放置在网络的多个节点,可以起到均衡负载的作用,降低服务器的压力。
阅读全文 »

VerneMQ 出现pub没有权限的错误,但是redis的权限又是正常的bug

发表于 2018-07-04 | 分类于 webrtc相关 | | 阅读次数:

今天在测试webrtc的时候,有出现一个mqtt的情况,就是客户端端在接入VerneMQ的时候。报了一个这个错误:

2018-07-03 10:10:16.060 [error] <0.685.0>@vmq_mqtt_fsm:auth_on_publish:713 can’t auth publish [<<”638c0c408ff5f0aea8ae6973e28d5990”>>,{[],<<”ea0838b70f13405bc7d8355b13b4c1b3”>>},1,[<<”75d0f301b0864bee8e0e6c5709c1cef6”>>,<<”52”>>,<<”26”>>,<<”register”>>],<<”{\”method\”:\”register.addClient\”,\”jsonrpc\”:\”2.0\”,\”id\”:1,\”params\”:[\”638c0c408ff5f0aea8ae6973e28d5990\”]}”>>,false] due to error

阅读全文 »

golang服务使用代理端口来请求海外服务器的http接口

发表于 2018-07-04 | 分类于 golang相关 | | 阅读次数:

之前项目有发生过一种情况,就是我们的测试服在中国区,然后有一个load balance 的服务,在使用lb服务去请求线上美区的另一个服务的时候,因为墙的关系,导致请求失败,因此 pc端登录的时候,经常会失败。
1
我看了一下 lb 的log,全部是请求 海外这一台 服务器,然后超时

[Error] [/var/lib/jenkins/workspace/airdroid-dev-go-loadbalance/utils.go 245] [2017-08-10 15:21:16] [GetGoPushSubUrl getWebContent(https://xxx.xxx.com/server/get?k=t-200-18152649&p=3) error: Get https://xxx.xxx.com/server/get?k=xxx: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)]

阅读全文 »

利用iframe post跨域的方式解决项目在firefox浏览器中下载zip包的bug

发表于 2018-07-03 | 分类于 前端相关 | | 阅读次数:

之前在做 web.airdroid.com (这个项目允许在web上操作手机的东西,尤其是在同一个局域网下)项目的时候,有发生过一个bug, 就是Firefox 在 web.airdroid.com 进行 zip 包下载,会报一个 forbidden 的错误,这个错误是手机端返回的。
1
这时候点击下载,这个页面就会跳转到
1
为啥会这样呢,不仅整个 web.airdroid.com 的页面都重定向了,而且下载还失败了???

阅读全文 »
1…121314…16
Zach Ke

Zach Ke

做最咸的那一条

316 日志
31 分类
83 标签
GitHub
© 2024 Zach Ke
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4