导言
导言
Majora是一个快速搭建代理ip池集群的中心化系统。如下图,只需要部署一台服务器,然后在各个网络设备上面安装终端(endpoint), 即可自动的组件代理ip资源池。
- 如果你是代理IP池供应厂商,可以方便依托majora部署您的代理IP池,将你的vps节点、拨号资源、adsl等IP拨号资源组合为代理IP池系统,用于对外售卖
- 如果你是爬虫团队,对于部分业务需要高度可控的IP池系统(特别是在交易场景,需要明确交易过程IP不发生改变),则可以方便的使用majora创建一个完全独立控制拨号的IP池。
- 移动4GIP池建设,依托我们稳定的Android客户端,您可以将终端程序运行在Android手或者Android开发板中,供应独特的4G流量代理
- IP池二级转发,如果已经有一个IP池,你希望将他包装为新的IP池资源,则可以使用majora的exporter模块,将IP池对接到majora服务上(即使你的IP池运行在内网下)
- 家庭IP池建设,如海外homeIP池建设,我们提供多种架构的网络设备接入终端
基础概念
在不展开技术细节的情况下,希望读者了解下图的简单示意图,理解majora的大概工作模型,如此可以更好的使用majora的能力。

IP池
majora提供5种内置的IP池模型,每种IP池都包含了多个端口,而之中的每个端口都是一个提供完整代理IP服务的服务器。
- Random:随机代理IP池会在每次代理转发的时候,随机的选择一个可用代理资源 代理请求和IP资源供应者没有绑定关系,这很适合做无状态的爬虫访问方案
- Static:静态代理IP池,每一个端口将会固定的绑定一个IP资源节点。端口和IP资源永远绑定,代理IP出口可以长期不改变, 他就是我们常说的长效代理,他特别适合跨境电商等需要保持长期稳定代理IP的场景
- Consistent: 一致性哈希智能IP池,他将端口和代理IP资源节点做一执行哈希映射,这样当IP出现不稳定下线的时候,就会 有其他的IP资源节点临时顶上。而当这个IP资源恢复了以后,他将重新替换刚刚的临时IP资源节点。 一致性智能IP池可以 保持一个相对稳定和固定的IP出口规则,能尽可能的均衡出口IP稳定和IP服务能力有效(也就是说永远不会出现IP无法使用的情况 的能力模型。一致性智能IP池是一般情况为爬虫代理IP池的推荐方案
- City:城市IP池 ,支持以城市作为区分的IP节点分发,他有如下特性
- IP池开放多个端口,每个端口映射一个城市,即确定端口保持和某个城市的映射关系
- 对于确定的用户,访问确定的端口,不光城市将会确定,城市中为其服务的IP节点资源也是确定的,也就代表同一个用户在选择城市之后,多次访问的出口IP保持稳定(即使对应城市有很多IP出口)
- 对于确定的端口(即确定的城市),不同的用户将会映射到不同的IP资源节点上,也就是同一个城市的IP池中,多个用户的流量分别实现负载均衡
在业务使用上,业务若希望确定的知道那些端口分别对应那些城市,则应该通过http接口定时同步端口城市映射关系,如此给最终客人分配可用的(国家)城市通道, 请注意受限节点资源在不停的变化,映射关系实际上也是不停变化的。然而由于系统有15分钟记忆时间,只要用户在一直在使用代理通道,则映射关系不会直接影响正在使用的用户
- 指令IP池:通过用户名参数扩展,实现每次代理根据程序设定传递动态参数。IP池根据用户参数动态决策如何 实现IP资源路由绑定,指令IP池可以扩展各种灵活高效的IP绑定方案,如支持国家/城市分配、支持经纬度动态路由等。 我们将在后续扩展各种类型的指令IP池,用以满足各类灵活需要
终端节点
所有介入majora系统的、提供最终代理IP出口服务的节点,就是Majora的终端节点(endpoint或者client),他们是最终提供真实网络服务的网络资源, 一般情况下节点越多,则代表您的IP资源池越大。当然终端节点由于其类型、环境不同,具备各种不同属性。majora允许你基于这些节点独特的属性灵活的制定 您的业务规则。
由于我们是统一的中心服务,此时终端节点只需要能够链接上服务器即可构建IP池,所以终端节点的网络位置并不重要。这让我们的集群架构变得非常简单,
- 我们不需要为每个终端做复杂的配置,只需要给他指定majora中心服务器地址一个参数即可
- 任意位置的网络设备均可以安装,不需要考虑网络运维环境
- 自带内网穿透功能,让ip池的出口渗透到手机、app、pc软件集成、路由器等没有公网ip的环境下。极大扩充ip池的业务场景
我们提供了各种场景下的终端接入:
- 各种系统环境:Linux、windows、macos等PC环境,以及各种可以安装扩展程序的路由器环境(如openwrt等)
- Android app环境集成
- 二级代理池接入客户端(此种场景网络流量压力较大,一般需要使用完整的服务器或PC系统,故仅仅提供java版本,用于应对高吞吐网络负载)
重播
对于完全持有设备资源场景,一般网络供应商支持通过重新接入网络环境的方式获得新的IP,这样终端节点便可以切换IP,这对于IP池供应场景,可以让我们的系统获得大量出口IP。 所有的爬虫业务几乎都是这种通过这种方式逃过反爬系统的IP拦截。
- asdl拨号pc机器,传统的拨号上网电脑,可以通过拨号功能重新获得IP(ps:现代化入户光猫不再属于这种场景)
- vps拨号节点,很多网络供应商提供vps机器节点,而大部分vps机器供应商均可以通过重播的方式替换IP
- 手机:通过切换飞行模式可以获得新的接入IP
对于支持重播的场景,终端有他的策略来决策是否支持重播、以及如何发起重播,之后这些信息会在终端接入到majora的时候被majora统一管理。 majora后台提供《重播计划》功能,用于在这个模块可以灵活的指定重播策略
- 什么时候进行重播,定时还是固定时间间隔等
- 对于那些设备需要计划重播,即重播的设备范围定制
- 重播的执行记录,什么时候发起过重播、重播是失败和成功以及对应失败原因、重播前后IP变化情况
权限
在majora3时代,我们设计了更加完整的权限模型,系统管理员可以对用户进行细粒度的权限控制
- 双账号鉴权模型:对于代理IP访问时,有系统后台账户和代理访问账户两套账号密码,
- 其中后台账户是登录到后台进行管理使用,具备更高的权限,对于客户所在公司或者团队来说,管理员可能持有后台账户
- 其中代理访问账户是代理请求时,通过程序发送过来的账户密码、一般情况下他们需要填入到代码中。这避免客户团队成员通过代码内容反推得到后台的账户密码发生权限越界
- IP池可见性控制,对于普通用户(majora的客户),他们只能看见他拥有权限的IP池,而majora可能存在多个其他节点资源组成的IP池。
- 管理员权限和普通权限可见性:对于普通用户只能看到他自己相关的信息,包括访问日志 、和自己相关的监控指标、代理配置信息等。而对于设备节点、重播管理等底层资源则无无权限访问
- ACL:为了避免客户违反当地法律访问了一些非法网站,现在我们已经支持了ACL控制,你可以通过配置ACL规则对于某个用户(或者所有用户)进行某些网站进行拦截。如不允许客户通过代理服务访问Google
性能
majora具备极高的性能表现,单一majora节点即使跑满200M带宽、挂接数十万终端。CPU和内存也不会出现明显的增长和抖动。 这是由于majora使用事件驱动编程模型和独立设计的任务调度派发模型带来的,然而实际上此类代码非常难写,需要极高的代码编写技巧,一个不小心的代码位置就可能导致gc无法正常回收对象导致系统变慢。 事件驱动模型是一种比协程更加高性能的编程模型,同时也是比协程更加复杂的模型,这也是majora在服务端以java为主、在终端以go语言为主的原因。
- 代理转发,设备注册管理全流程无加锁设计,不会出现资源竞争
- 依托堆外内存的自主内存管理,代理转发产生的大片内存空间不依赖GC,这带来majora不会存在大量gc行为,不会因为频繁GC运行带来cpu消耗
- 分段转发不落地,http数据落到内存立马转发出去,不会存在payload长期驻于内存(如等待http body全部解析后才进行转发等)
然而即使如此,majora也提供了完整的监控和统计指标,让我们有抓手可以观察IP池、用户、终端转发、业务流trace等,让我们做到对系统运行状态心中有数。
- 立即生效的配置变更:新增/删除代理账户、密码变更、白名单变更、新建/修改代理IP池、修改ACL规则、新建/修改调度计划等配置内容均实时生效
- 代理使用统一监控:流量、次数、访问网站等。所有数据都在中心服务器产生,不需要分布式节点收集
- 状态一致性:任何网络终端节点崩坏,均在毫秒内被感知,因为都是tcp长链接,不会出现某个代理被判定可以使用实际上无法使用的情况。
- 服务稳定性:统一的服务器提供隧道代理,节点上下线不需要客户端感知
- 终端状态监控:在majorav3阶段,为了管理多达数十万的终端节点数量,我们单独为终端模块设计了单独的监控指标体系
- 节点流量和代理监控
- 节点延时变化(rt值),延迟越低则代表性能越好
- 重播监控
- 关键事件:上线、注册、流量摘除、发起拨号、离线、IP变化等关键事件的时间trace
