“从零到一“基于Freeswitch二次开发: 应用架构设计(二)

 一、架构分享

        上一篇文章“从零到一“基于Freeswitch二次开发:Freeswitch入门与网络架构 (一) 对Freeswitch二次开发做了一个介绍,距离这篇文章的发布时间有点久了,之前一直没时间把下文补上来。正好到了年末想起来,就把我们的一个实现架构进行分享。

        我们自己开发移动端APP如安卓、IOS:

        1、移动端就是一个sip协议的客户端,可以通过Freeswitch服务器进行语音通信,Freeswitch再通过落地语音网关实现网络语音到PSTN网络的打通,使用开源的sip客户端SDK Linphone:

                Linphone SDK 项目地址: https://github.com/BelledonneCommunications

        2、关于Freeswitch的sip抓包监控,我们采用的是Homer这个开源sip监控项目,Freeswitch本身支持对接Homer,可以在Freeswitch中进行配置Homer监听地址,将整个sip协议流程数据写入Homer的数据库,之后再通过UI可视化界面直观进行问题排查

                Homer项目地址:   https://github.com/sipcapture/homer 

        3、Bill话单计费方式,我们将Freeswitch的话单通过生成文件的形式,通过Filebeat采集话单推送到Kafka消息队列,再通过计费消费者进行消费,生成话单数据,最后将话单数据推送到APP后端进行计费操作

        4、通过ELK技术栈将话单新建消费组消费数据后写入ES,可以通过ES进行话单数据统计、异常发现、异常排查,结合Homer定位到具体某一次sip协议的全过程

        5、为了保证计费的正确性和成本风险可控性,我们需要提供一个强制kill挂断某一次通话的相关接口。因为实际过程中可能会存在某种bug, 移动端已经挂了,但是Freeswitch还没有释放某一次通话,导致这个链路一直存在,如用户才30秒已经挂了,但是这个链路持续了10几分钟,那我收用户30秒的钱,但是运营商会收我10分钟的钱,那就会造成和线路方结算亏本问题。

        所以每次客户端挂断,我们都会通过sip id进行强制挂断操作,保证不会出现结算亏本问题。我们暂且叫这个HTTP服务为【ESL服务】,因为已经有开源SDK连接Freeswitch,所以我们采用的是Python Flask即可。

二、安全性保证

 1、HTTPS、SIPS协议

        在HTTP Web服务本身我们肯定想都不用想,直接上HTTPS来保证数据的安全性、站点身份的可靠性。

       sip协议本身也是明文进行传输,往往我们会忽略。 但是这个sip协议针对语音这样的APP安全性更为敏感。

        因为我们早期测试服就因为不是很重视,测试服就被sip疯狂灌水攻击,伴随着破解sip账号、密码很多的sip包。如果我们没有上SSL的话,传输过程中的sip账号、密码一旦泄露就会造成盗打问题,导致经济损失。

        所以Freeswitch支持SSL的方式,针对sip协议进行SSL加密,从而来保证sip协议非明文传输、站点身份可靠性验证。

 2、本地IDC与阿里云服务通信,通过SSH隧道交互

        我们某些服务进行了上云操作,但是某些应用只能在本地IDC机房。那么我们怎么方便监控云上的相关服务,或者如连接云上的MySQL、ES这样敏感的数据呢?

        1、放开安全组,限制IP地址进行访问。 这种方式最简单,但是不能避免数据明文公网传输,数据被窃取的问题。

        2、通过SSH隧道的方式,通过SSH隧道将阿里云服务与本地IDC机房打通,这样的方式相对第一种方式更加安全。

        我们就采用的是第二种方式。

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度神经网络结构

单层的感知机不能解决“异或”问题。 在前面分别介绍了M-P神经元模型和感知机模型。在M-P神经元模型中,神经元接收到若干个输入信号,并将计算得到的加权后的总输入,经过激活函数的处理,最终产生神经元的输出。而感知机模型则由两层…

腾讯云标准型S5服务器2核2G、2核4G和4核8G五年机来了

腾讯云五年特价服务器来了,标准型S5云服务器,可选2核2G、2核4G和4核8G配置,一次性购买五年低至2折,免去续费贵烦恼。腾讯云百科txybk.com分享腾讯云5年服务器特价优惠活动、购买条件、云服务器配置及优惠价格: 腾讯云五…

[leetcode] 四数之和 M

:::details 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):…

Python正则的匹配与替换

import re 查找时的注意事项&#xff0c;要查找的内容左右两边打出来&#xff0c;用真正的字符&#xff0c;不要用.*?&#xff0c;离查找内容远一点&#xff0c;再用.*? a /aksj<a>哈哈哈<a><p>拉阿鲁<p>\.askjp b re.findall(<a>(.*?)<…

linux文件夹介绍

在linux内核文件夹下面存在着许多文件夹&#xff0c;那么那些文件夹是什么用处呢&#xff0c;下面将为你介绍。 (1)documentation 这个文件夹下没有内核代码&#xff0c;仅仅有一套实用的文档&#xff0c;但这些文档的质量不一。比如内核文档的文件系统&#xff0c;在该文件夹下…

计算机网络——传输层(五)

前言&#xff1a; 最重要的网络层我们已经学习完了&#xff0c;下面让我们再往上一层&#xff0c;对网络层的上一层传输层进行一个学习与了解&#xff0c;学习网络层的基本概念和网络层中的TCP协议和UDP协议 目录 ​编辑一、传输层的概述&#xff1a; 1.传输层&#xff1a; …

leetcode 315. 计算右侧小于当前元素的个数(hard)【小林优质解法】

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {int[]counts; //用来存储结果int[]index; //用来绑定数据和原下标int[]helpNums; //用于辅助排序 nums 数组int[]helpIndex; //用于辅助排序 i…

《Linux系统与网络管理》复习题库---shell编程题

1、shell 编程题&#xff1a;在根目录下有四个文件 m1.c&#xff0c;m2.c&#xff0c;m3.c&#xff0c;m4.c&#xff0c;用 Shell 编程&#xff0c;实现自动创建 m1,m2,m3,m4 四个目录&#xff0c;并将 m1.c,m2.c,m3.c,m4.c 四个文件分别剪贴到各自相应的目录下。 #!/bin/bash…

DS|队列

题目一&#xff1a;DS队列 -- 银行排队 题目描述&#xff1a; 在银行营业大厅共服务3种客户&#xff0c;类型为A\B\C&#xff0c;大厅分别设置了3个窗口分别服务三种客户&#xff0c;即每个窗口只服务一种客户。现有一批客户来银行办理业务&#xff0c;每个客户都有类型和办理…

go module本地包导入

go module本地包导入 本文目录 go module本地包导入启用go mod主项目工作目录本地module目录发布和使用模块 golang 1.11之后加入了go mod来替代GOPATH 官方文档参考&#xff1a;https://golang.google.cn/doc/tutorial/call-module-code 启用go mod 开启 Go modules # 临时开…

【谭浩强C程序设计精讲 5】运算符和表达式

文章目录 3.3 运算符和表达式3.3.1 C运算符3.3.2 基本的算术运算符3.3.3 自增&#xff08;&#xff09;、自减&#xff08;--&#xff09;运算符3.3.4 算术表达式和运算符的优先级与结合性3.3.5 不同类型数据间的混合运算3.3.6 强制类型转换运算符 3.3 运算符和表达式 3.3.1 C…

【Java】一文讲解Java类加载机制

Java 类加载机制是 Java 运行时的核心组成部分&#xff0c;负责在程序运行过程中动态加载和连接类文件&#xff0c;并将其转换为可执行代码。理解类加载机制&#xff0c;能更容易理解你一行行敲下的Java代码是如何在JVM虚拟机上运行起来。并且理解类加载机制之后&#xff0c;我…

DevOps持续交付之容器化CICD流水线

DevOps持续交付 随着DevOps⼤规模化的落地和应⽤&#xff0c;持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成&#xff0c;使⽤的开源⼯具是Jenkins&#xff0c;CD指的是持续交付和持续部署&#xff0c;⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…

思维方法——STC算子法

要素 尺寸&#xff0c;size时间&#xff0c;time成本&#xff0c;cost 操作步骤 明天研究对象现有的尺寸&#xff0c;时间&#xff0c;成本想像其尺寸逐渐变大乃至无穷大时会怎样想像其尺寸逐渐变小乃至无穷小时会怎样想像其作用时间或速度逐渐变大以至无穷大时会怎样想像其…

CA和证书

安全机制 墨菲定律 如果有两种选择&#xff0c;其中一种将导致灾难&#xff0c;则必定有人会作出这种选择。即&#xff1a;做事不要有侥幸心理。 常用安全技术 认证、授权、审计、安全通信 加密算法和协议 对称加密算法 加密和解密使用同一个秘钥。 特性 加密、解密使…

Python+OpenCV 零基础学习笔记(1-3):anaconda+vscode+jupyter环境配置

文章目录 前言相关链接环境配置&#xff1a;AnacondaPython配置OpenCVOpencv-contrib:Opencv扩展 Notebook:python代码笔记vscode配置配置AnacondaJupyter文件导出 前言 作为一个C# 上位机&#xff0c;我认为上位机的终点就是机器视觉运动控制。最近学了会Halcon发现机器视觉还…

[LeetCode][Python]389. 找不同

简单 给定两个字符串 s 和 t &#xff0c;它们只包含小写字母。 字符串 t 由字符串 s 随机重排&#xff0c;然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1&#xff1a; 输入&#xff1a;s "abcd", t "abcde" 输出&#xff1a;"…

修改css、html后前端没有刷新的解决方法(图文)

修改css、html后前端没有刷新的解决方法&#xff08;图文&#xff09; 修改css、html后前端没有刷新的原因和图文解决方法 1 原因 网页的缓存机制 2 解决方法 禁用网页缓存&#xff0c;具体操作如下 打开F12网络选项勾选禁用缓存。此时再刷新页面即可实时更新 以上就是全…

Python面向对象编程

面向对象的三个基本特征&#xff1a; 封装继承多态 封装 将客观事物用属性和方法表示成类。客观事物对应现实生活中的各种事物&#xff0c;属性和方法为计算机中对应事物的表示形式和动作。 属性包括类属性和实例属性。其中类属性为该模版对象共有的属性参数&#xff0c;如…

CentOS系统中设置IP地址的方式和存在的问题

在CentOS系统中设置IP地址通常涉及以下步骤&#xff1a; 打开网络接口配置文件&#xff1a; 使用文本编辑器&#xff08;如vi、nano或emacs&#xff09;打开 /etc/sysconfig/network-scripts/ifcfg-eth0 文件。这里的"eth0"是网卡的名称&#xff0c;如果你的系统中有…