搜索业务是马蜂窝流量分发的重要入口.很多用户在使用马蜂窝时,都会有目的性地主动搜索与自己旅行需求相关的各种信息,衣食住行,事无巨细,从而做出最符合需求的旅行决策. 因此在马蜂窝,搜索业务交互的下游模块非常多,主要有目的地.POI.热门景点.美食.商场.酒店.问答.攻略.机票火车票等等,通过实时.精准地返回搜索结果,帮助用户做出个性化旅行决策. 面对越来越高的流量,马蜂窝技术团队积极尝试对搜索架构进行优化和升级,来保证搜索业务的稳定和性能. 方案背景 由于历史原因,优化前的搜索服务与下游模块交的互…
  article- @嘟嘟噜- May/26/2018 18:35:30 如何基于Golang设计一套微服务架构 微服务(Microservices),这个近几年我们经常听到.那么现在市面上的的微服务架构技术有很多,比如比较成熟的 Spring Boot.Spring Cloud 全家桶.如果在非 Java 体系里如何实现微服务架构呢? 经过几个月的折腾,我们就来聊聊Golang在微服务架构是如何实现? What are microservices? 微服务 —— 也称为微服务架构 —— 是一…
基于认证的代理平台搭建配置squid-20130730 功能:通过squid代理实现 (1)基于用户名密码认证的出口ip路由选择 (2)基于client源ip的出口ip路由选择 (3)基于连接本机ip的出口ip路由选择 (4)实现高度匿名代理 (5)通过snmp使用cacti监控squid的状态 一.squid 安装过程 wget http://www.squid-cache.org/Versions/v3/3.3/squid-3.3.8.tar.gz tar xzvf squid-3.3.8.…
一.什么是RPC 1.简介: RPC:Remote Procedure Call,远程过程调用.简单来说就是两个进程之间的数据交互. 正常服务端的接口服务是提供给用户端(在Web开发中就是浏览器)或者自身调用的,也就是本地过程调用. 和本地过程调用相对的就是:假如两个服务端不在一个进程内怎么进行数据交互?使用RPC. 尤其是现在微服务的大量实践,服务与服务之间的调用不可避免,RPC更显得尤为重要. 2.原理: 计算机的世界中不管使用哪种技术,核心都是对数据的操作.RPC不过是将数据的操作垮了一个…
基于golang分布式爬虫系统的架构体系v1.0 一.什么是分布式系统 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统.简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样.分布式意味着可以采用更多的普通计算机(相对于昂贵的大型机)组成分布式集群对外提供服务.计算机越多,CPU.内存.存储资源等也就越多,能够处理的并发访问量也就越大. 从分布式系统的概念中我们知道,各个主机之间通信和协调主要通…
Fastflow 是什么?用一句话来定义它:一个 基于golang协程.支持水平扩容的分布式高性能工作流框架. 它具有以下特点: 易用性:工作流模型基于 DAG 来定义,同时还提供开箱即用的 API,你可以随时通过 API 创建.运行.暂停工作流等,在开发新的原子能力时还提供了开箱即用的分布式锁功能 高性能:得益于 golang 的协程 与 channel 技术,fastflow 可以在单实例上并行执行数百.数千乃至数万个任务 可观测性:fastflow 基于 Prometheus 的 metr…
Gravitational Teleport 是一个先进的 SSH 服务器,可通过 SSH 或者 HTTPS 远程访问 Linux 服务器.其目的是为了替代 sshd.Teleport 可以轻松让团队以最佳实践来使用 SSH,例如: 无需分发密钥,Teleport 使用基于证书的访问并实现自动过期 增强了两阶段身份验证 集群支持,每个 Teleport 节点是集群的一部分,而且可通过 Web UI 浏览 可以记录和重放 SSH 会话,方便分享和审计 通过会话的共享来实现协作诊断问题 可通过 HT…
golang并发编程 引子 golang提供了goroutine快速实现并发编程,在实际环境中,如果goroutine中的代码要消耗大量资源时(CPU.内存.带宽等),我们就需要对程序限速,以防止goroutine将资源耗尽.以下面伪代码为例,看看goroutine如何拖垮一台DB.假设userList长度为10000,先从数据库中查询userList中的user是否在数据库中存在,存在则忽略,不存在则创建. //不使用goroutine,程序运行时间长,但数据库压力不大 for _,v:=ra…
本文描述了怎么通过ssh反向代理实现远程协助,并提供了相关代码. 可满足web开启远程协助功能后,维护人员能够通过ssh和http登录客户机器(包括在nat环境下) web开启该功能后,ssh才能登录: 通过标识能够区分不同的机器: 能够穿nat: 操作系统: CentOS 6.5_x64 开发语言: Python 源码地址: https://github.com/mike-zhang/remoteHelper 整体结构如下: 主要成员如下: 客户A 购买公司产品的客户服务器 服务器B 公司公网…
并发概要 随着多核CPU的普及, 为了更快的处理任务, 出现了各种并发编程的模型, 主要有以下几种: 模型名称 优点 缺点 多进程 简单, 隔离性好, 进程间几乎无影响 开销最大 多线程 目前使用最多的方式, 开销比多进程小 高并发模式下, 效率会有影响 异步 相比多线程而言, 可以减少线程的数量 编码要求高, 需要对流程分割合理 协程 用户态线程, 不需要操作系统来调度, 所以轻量, 开销极小 需要语言支持 协程介绍 协程是个抽象的概念, 可以映射到到操作系统层面的进程, 线程等概念. 由于协…