Browsed by
作者:高轩

golang api中避免内存泄露

golang api中避免内存泄露

你有必要在把golang api投入生产环境前阅读下这篇文章,基于我们的真实经历,因为没有使用正确的方法,我们在每个release都很遇到困难和挣扎。

就在几周之前,我们刚刚修复了一个奇怪的未发现的bug,我们试了很多方法去debug和修复它。这个bug并不是业务逻辑上的问题,因为它已经在生产环境跑了几周了,那是因为我们的自动释放机制,隐藏了这个问题,所以它看上去是正常。

直到最近,我们发现这个问题是因为代码并没有处理好。

架构

首先说下,我们在架构中使用了微服务模式。我们有一个gateway API - 我们叫“main API”,它服务于我们的用户(手机客户端和web页面)。由于它的角色很像API Gateway,所以它的任务就只是处理用户的请求,然后再请求道对应的服务上,然后将reponse返回给用户。这个“main API”完全是使用Golang开发的。为什么选择golang在这里就不详细介绍了。

我们系统的架构图大概如下

问题

我们被main API困扰了好久,他经常down掉,并且返回给...

阅读全文
康威定律与技术之痛

康威定律与技术之痛

今天看了一篇技术博客,里面提到了“康威定律”,很好奇就去google了一下,下面来分享一下我的收获。

所谓康威定律,就是一个叫康威的人提出的一个技术观点

设计系统的企业受限于生产设计,这些设计是企业沟通结构的副本——Melvin Conway(1967)。

这意味着设计系统的企业,它们生产的设计等同于企业内的沟通结构。下图说明了此概念

konway's la
阅读全文
如何在PC端-开发机访问云服务器内网的mysql数据库

如何在PC端-开发机访问云服务器内网的mysql数据库

出于安全策略限制,云服务器上通常禁止直接使用PC机或者开发机直接访问数据库。但是对于一些习惯使用MySQL图形化界面访问数据库的童鞋,如何在自己的PC机上实现访问数据库呢?今天就介绍一种SSH通道的实现方式。
  • 跳板机
这是一台已经授权可以使用mysql协议访问数据库的服务器,比如机房前端机
  • 数据库:DBIP : DBPOR
这是数据库给出的连接地址
  • 影子机
我们还需要一台Linux服务器,它具备两个属性1、它可以通过ssh访问跳板机2、诸多PC机可以访问它的特定端口接下来就是在“影子机-跳板机-数据库”之间建立一个“SSH隧道”,实现把数据库的IP和端口映射到影子机的指定端口上,之后诸多PC机就可以通过访问影子机的IP和指定端口来访问数据库了1、登录影子机2、启动一个ssh进程:ssh -g -f -NL 影子机IP:影子机指定端口:数据库IP:数据库端口 SSH登录跳板机的用户名@跳板机IP;那么PC端如何配置呢,其实这个已经很简单了,对于PC机来说,可以认为“影子机IP : 影子机指定端口...阅读全文
Linux下两台机器scp无需密码传输

Linux下两台机器scp无需密码传输

前言

在工作中,经常需要发布代码到服务器,之前使用rz的方式上传zip的压缩包,可还是有些不智能,于是想到怎么通过scp的方式上传到服务器。于是我就想到使用git bash的scp方法来操作,使用过scp的都知道需要指定远端服务器的帐号并手动输入密码,下面就讲一下如何避免每次都需要输入密码这个操作。

建立ssh的信任关系

在这里先介绍两个概念:SSH公钥(~/.ssh/id_rsa.pub)和公钥授权文件(~/.ssh/authorized_keys),这两个文件的作用具体可以参考ssh的man手册
~/.ssh/id_rsa.pub        Contains the public key for authentication.  These files are not sensitive and can (but need not) be readable by anyone.​~/.ssh/authorized_keys        Lists the public keys (DSA/ECDSA/RSA) that can be used for logging in as this user.  The format of this file is described in the sshd(8) manual page.  This file is not highly sensitive, but the recommended permissions are read/write for the user, and not accessible by others.
从描述中我们可以知道,~/.ssh/id_rsa.pub文件中包含了认证的公钥信息,而且该文件可以被任何人读取;而~/.ssh/authorized_keys文件中则列举了登录用户的公钥信息(换句话说就是使用这些公钥信息可以登录当前设备),而为了安全考虑,该文件一般建议只有本用户可以有读写权限(这条信息很关键,后面会讲)。

公钥和私钥

提到公钥对应的就会有私钥,在谈这两个概念之前我们先了解另外一组概念...阅读全文
通过nginx防止xmlrpc.php攻击

通过nginx防止xmlrpc.php攻击

最近在博客后台发现有一些ip的访问量特别大,排查nginx日志发现基本都是xmlrpc攻击xmlrpc.php攻击可以绕过使用用户名登陆限制,进行暴力破解。在不想修改wordpress代码的情况下,使用nginx限制是最好的办法。不建议删除xmlrpc.php文件,因为可能造成莫名其妙的错误
  • 方法
nginx直接禁止访问该文件
locatio* /xmlrpc.phdenall;
  • 方法
通过跳转或重定向转移流量,这样可以引流到你希望引流到目标的网址或者i
locatio* /xmlrpc.phproxy_pashttps://www.baidu.com;
阅读全文
pip 安装以及使用

pip 安装以及使用

pip官网https://pypi.python.org/pypi/pippip有点类似RedHat里面的yum,安装Python包非常方便。本节详细介绍pip的安装、以及使用方法。

安装

linu

执行下列命令
wgehttps://bootstrap.pypa.io/get-pip.ppython get-pip.p

window

  1. 确定python已经配置到环境变量
  2. 在官网下载 get-pip.p
  3. 在命令行输入 python get-pip.p
更详细的介绍,请在官网查阅

使用

通过pip help可以很清楚的看到使用方法
[gaoxuan@AY140416102243006a45Z ~]$ pip help​Usage:pip <command> [options]​Commands:install                     Install packages.uninstall                   Uninstall packages.freeze                      Output installed packages in requirements format.list                        List installed packages.show                        Show information about installed packages.search                      Search PyPI for packages.wheel                       Build wheels from your requirements.help                        Show help for commands.​General Options:-h, --help                  Show help.--isolated                  Run pip in an isolated mode, ignoring environment variables and user configuration.-v, --verbose               Give more output. Option is additive, and can be used up to 3 times.-V, --version               Show version and exit.-q, --quiet                 Give less output.--log <path>                Path to a verbose appending log.--proxy <proxy>             Specify a proxy in the form [user:passwd@]proxy.server:port.--retries <retries>         Maximum number of retries each connection should attempt (default 5 times).--timeout <sec>             Set the socket timeout (default 15 seconds).--exists-action <action>    Default action when a path already exists: (s)witch, (i)gnore, (w)ipe, (b)ackup.--trusted-host <hostname>   Mark this host as trusted, even though it does not have valid or any HTTPS.--cert <path>               Path to alternate CA bundle.--client-cert <path>        Path to SSL client certificate, a single file containing the private key and the certificate in PEM format.--cache-dir <dir>           Store the cache data in <dir>.--no-cache-dir              Disable the cache.--disable-pip-version-check                             Don't periodically check PyPI to determine whether a new version of pip is available for download. Implied with --no-index.
阅读全文
【Chris Richardson 微服务系列】使用微服务重构单体应用

【Chris Richardson 微服务系列】使用微服务重构单体应用

编者的话 本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的最后一篇。第一篇介绍了微服务架构模块,并且讨论了使用微服务的优缺点。随后的文章讨论了微服务的不同方面,包括使用 API 网关、进程间通讯、服务发现、事件驱动的数据管理,以及部署微服务。本篇将讨论从单体应用迁移到微服务的策略。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4.服务发现的可行方案以及实践案例5.微服务的事件驱动数据管理6.选择微服务部署策略7. 将单体应用改造为微服务(本篇文章

使用微服务重构概述

将单体应用转变为微服务的过程也是将应用现代化的过程,数十年来开发者们一直致力于此。因此,当把应用重构为微服务的时候...阅读全文
【Chris Richardson 微服务系列】选择微服务部署策略

【Chris Richardson 微服务系列】选择微服务部署策略

编者的话 本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第六篇文章。第一篇介绍了微服务架构模式,并且讨论了使用微服务的优缺点。随后的文章讨论了微服务的不同方面,包括使用 API 网关、进程间通讯、服务发现和事件驱动的数据管理。这篇文章将深入讨论部署微服务的策略。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4.服务发现的可行方案以及实践案例5.微服务的事件驱动数据管理6. 选择微服务部署策略(本篇文章7.将单体应用改造为微服务

诱因

部署单体应用意味着运行大型应用的多个相同副本,通常提供若干台(N)服务器(物理机或虚拟机),在每台服务器上运行若干个(M)应用实例。部署单体应用并不总...阅读全文
【Chris Richardson 微服务系列】事件驱动的数据管理

【Chris Richardson 微服务系列】事件驱动的数据管理

编者的话 本文来自 Nginx 官方博客,是「Chris Richardson 微服务」系列的第五篇文章。第一篇文章介绍了微服务架构模式,并且讨论了使用微服务的优缺点;第二和第三篇描述了微服务架构模块间通讯的不同方面;第四篇研究了服务发现中的问题。本篇研究微服务架构带来的分布式数据管理问题
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4.服务发现的可行方案以及实践案例5. 微服务的事件驱动数据管理(本篇文章6.选择微服务部署策略7.将单体应用改造为微服务

微服务以及分布式数据管理中存在的问题

单体应用通常使用单个关系型数据库,由此带来的好处在于应用能够使用 ACID 事务,后者提供了重要的操作特性
  • 原子化:原子粒度的更改...
阅读全文
【Chris Richardson 微服务系列】服务发现的可行方案以及实践案例

【Chris Richardson 微服务系列】服务发现的可行方案以及实践案例

编者的话 本文来自 Nginx 官方博客,是微服务系列的第四篇文章。第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点;第二篇和第三篇描述了微服务架构内部的通讯机制。这篇文章中,我们将会探讨服务发现。
作者介绍Chris Richardson,是世界著名的软件大师,经典技术著作《POJOS IN ACTION》一书的作者,也是 cloudfoundry.com 最初的创始人,Chris Richardson 与 Martin Fowler、Sam Newman、Adrian Cockcroft 等并称为世界十大软件架构师。Chris Richardson 微服务系列全 7 篇
1.微服务架构概念解析2.构建微服务架构:使用 API Gateway3.深入微服务架构的进程间通信4. 服务发现的可行方案以及实践案例(本篇文章5.微服务的事件驱动数据管理6.选择微服务部署策略7.将单体应用改造为微服务

为什么要使用服务发现

假设我们写的代码会调用 REST API 或者 Thrift API 的服务。为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口)。运行在物理硬件上的传统应用中,服务实例的网络位置是相对固定的;代...阅读全文