日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

輕量級(jí)消息路由與任務(wù)執(zhí)行引擎 hermes-agent 的設(shè)計(jì)與實(shí)踐

輕量級(jí)消息路由與任務(wù)執(zhí)行引擎 hermes-agent 的設(shè)計(jì)與實(shí)踐 1. 項(xiàng)目緣起為什么我會(huì)自己寫(xiě)一個(gè)叫 hermes-agent 的東西先聊聊名字。Hermes 是希臘神話里的信使神腳上長(zhǎng)著翅膀負(fù)責(zé)在眾神之間傳遞消息。我當(dāng)時(shí)給這個(gè)項(xiàng)目起名的時(shí)候想的就是這一層含義——在一個(gè)系統(tǒng)越來(lái)越復(fù)雜的時(shí)代消息的傳遞、路由、分發(fā)、執(zhí)行就是數(shù)字世界的信使工作。所以我管它叫 hermes-agent一個(gè)專門負(fù)責(zé)消息接入、規(guī)則匹配和自動(dòng)執(zhí)行的小型智能體框架。這個(gè)項(xiàng)目的背景很具體。我手里維護(hù)著好幾套內(nèi)部服務(wù)有定時(shí)任務(wù)、有外部回調(diào)、有用戶行為事件還有各類監(jiān)控告警。這些消息源格式五花八門有的是 JSON有的帶簽名需要驗(yàn)簽有的是純文本塞在 Webhook 里。早期我的處理方式是在每個(gè)服務(wù)里各寫(xiě)各的入口邏輯A 服務(wù)收到回調(diào)就更新數(shù)據(jù)庫(kù)B 服務(wù)收到事件就調(diào)用某個(gè)內(nèi)部 APIC 服務(wù)收到告警就發(fā)釘釘通知。問(wèn)題是一旦消息處理邏輯發(fā)生變化我需要同時(shí)改好幾個(gè)服務(wù)重新部署排錯(cuò)的時(shí)候還要挨個(gè)翻日志非常被動(dòng)。后來(lái)我認(rèn)真想了一下這些場(chǎng)景的本質(zhì)其實(shí)是一樣的源頭把事件拋出來(lái)中間需要有一套穩(wěn)定的機(jī)制接住再根據(jù)規(guī)則決定接下來(lái)讓誰(shuí)去干活。這正是 agent 最擅長(zhǎng)的事情。于是 hermes-agent 的雛形誕生了——一個(gè)運(yùn)行時(shí)基于 Python asyncio、存儲(chǔ)用 SQLite生產(chǎn)環(huán)境可以換 Postgres、規(guī)則配置走 YAML 的輕量級(jí)消息代理與任務(wù)執(zhí)行引擎。它不依賴重量級(jí)框架部署就是拉代碼起進(jìn)程非常適合中小型團(tuán)隊(duì)內(nèi)部自動(dòng)化場(chǎng)景。這篇文章我會(huì)把整個(gè)項(xiàng)目的設(shè)計(jì)思路、運(yùn)行模型、核心代碼、踩坑記錄和演進(jìn)方向都攤開(kāi)來(lái)講。如果你也在做 Webhook 統(tǒng)一接入、任務(wù)分發(fā)、事件驅(qū)動(dòng)型自動(dòng)化或者單純想看看一個(gè) agent 框架應(yīng)該怎么設(shè)計(jì)這篇內(nèi)容應(yīng)該對(duì)你有幫助。對(duì)于基礎(chǔ)偏弱的讀者我會(huì)盡量把涉及到的基礎(chǔ)概念一并講清楚不預(yù)設(shè)你已經(jīng)掌握 Python 異步編程或者消息隊(duì)列的完整知識(shí)。2. 核心架構(gòu)消息路由與任務(wù)編排的運(yùn)行模型2.1 三層模塊劃分接入層、規(guī)則層、執(zhí)行層hermes-agent 從設(shè)計(jì)之初就是三層結(jié)構(gòu)這個(gè)分層思路不是我拍腦袋決定的而是從實(shí)際需求里自然長(zhǎng)出來(lái)的。第一層是接入層Collector。它負(fù)責(zé)統(tǒng)一接住各種來(lái)源的消息。常見(jiàn)的 Collector 有 HTTP Webhook Collector、定時(shí)器 Collector、文件監(jiān)聽(tīng) Collector 和隊(duì)列消費(fèi) Collector。對(duì)于 HTTP 類型的 Collector我會(huì)封裝成一個(gè)獨(dú)立的 Web 服務(wù)進(jìn)程只做一件事把收到的請(qǐng)求體轉(zhuǎn)成統(tǒng)一格式的 Event 對(duì)象寫(xiě)入消息隊(duì)列或存儲(chǔ)然后立刻返回響應(yīng)給上游。這樣上游接口的響應(yīng)速度不會(huì)受到下游處理邏輯的影響這是個(gè)很關(guān)鍵的設(shè)計(jì)。第二層是規(guī)則層Router。它負(fù)責(zé)判斷一條消息應(yīng)該交給誰(shuí)處理。判斷依據(jù)可以從消息內(nèi)容、消息來(lái)源、消息優(yōu)先級(jí)等多個(gè)維度提取。每一條規(guī)則本質(zhì)上是一組條件和動(dòng)作的映射。條件支持等值匹配、正則匹配、JSONPath 取值匹配等多種模式。動(dòng)作則是指定執(zhí)行器名稱和參數(shù)。第三層是執(zhí)行層Executor。它負(fù)責(zé)真正干活。執(zhí)行器是一段可插拔的代碼單元接收 Event 對(duì)象執(zhí)行具體業(yè)務(wù)邏輯。比如 HttpExecutor 把 Event 轉(zhuǎn)成 HTTP 請(qǐng)求發(fā)給內(nèi)部系統(tǒng)PythonExecutor 直接執(zhí)行一段配置好的 Python 腳本ShellExecutor 跑一條命令NotifyExecutor 發(fā)送通知到釘釘或者郵件。這樣的好處是接新場(chǎng)景時(shí)你不需要?jiǎng)涌蚣鼙旧碇恍枰獙?xiě)一個(gè)新的 Executor 注冊(cè)進(jìn)去再配一條規(guī)則。這三層之間通過(guò)一個(gè)消息存儲(chǔ)默認(rèn) SQLite生產(chǎn)建議 Postgres和進(jìn)程內(nèi)的消息通道串起來(lái)。實(shí)際運(yùn)行的時(shí)候接入層進(jìn)程把消息寫(xiě)進(jìn)存儲(chǔ)并標(biāo)記為 pending處理進(jìn)程輪詢 pending 消息交給規(guī)則層判斷再調(diào)用執(zhí)行層完成任務(wù)并回寫(xiě)狀態(tài)。2.2 一次消息從接入到執(zhí)行完成的完整生命周期我用一個(gè)實(shí)際例子說(shuō)明整個(gè)流程。假設(shè)你有一個(gè)電商訂單系統(tǒng)用戶支付成功后訂單服務(wù)會(huì)調(diào)用你配置的 Webhook 地址通知支付結(jié)果。這個(gè)地址就是 hermes-agent 暴露出的 HTTP 接入點(diǎn)。第一步訂單服務(wù) POST 一條 JSON 到/hooks/payment內(nèi)容大概是{order_id: ORD20250101, status: paid, amount: 99.5}。HTTP Collector 收到請(qǐng)求后先做格式校驗(yàn)提取必要的元信息來(lái)源標(biāo)記、接收時(shí)間、原始內(nèi)容然后封裝成 Event 對(duì)象dataclass class Event: event_id: str # 全局唯一ID用于冪等 source: str # 來(lái)源標(biāo)記比如 payment_webhook event_type: str # 事件類型比如 payment.paid payload: dict # 原始消息內(nèi)容 received_at: datetime priority: int # 優(yōu)先級(jí)默認(rèn)0越大越優(yōu)先第二步Collector 把 Event 寫(xiě)入消息存儲(chǔ)。同時(shí)進(jìn)程內(nèi)會(huì)立即觸發(fā)一次路由判斷但注意這里不是同步阻塞的。寫(xiě)入成功后 HTTP 接口立刻返回 200處理邏輯全部在后臺(tái)繼續(xù)。這個(gè)異步設(shè)計(jì)能保證上游的 Webhook 調(diào)用不會(huì)被你這邊慢邏輯拖死。第三步處理進(jìn)程從存儲(chǔ)中輪詢到這條 pending 消息進(jìn)入 Router。Router 讀取已加載的規(guī)則集合并找到匹配項(xiàng)。rules: - name: payment_paid_order_finish match: event_type: payment.paid actions: - executor: python_executor params: script_path: ./scripts/order_finish.py timeout: 30第四步執(zhí)行器運(yùn)行后腳本讀取 Event把訂單狀態(tài)更新為已完成、發(fā)送短信通知用戶、調(diào)用倉(cāng)儲(chǔ)系統(tǒng)的出庫(kù)接口。執(zhí)行結(jié)果回寫(xiě)到消息存儲(chǔ)狀態(tài)從 pending 變成 success 或者 failed。如果失敗會(huì)進(jìn)入重試隊(duì)列按配置的退避策略重新執(zhí)行。整個(gè)生命周期最核心的原則是消息不丟失。消息無(wú)論是在接收階段還是在處理階段每一步的狀態(tài)更新都落盤保存絕不在內(nèi)存里直接處理完不記錄。這樣即使進(jìn)程中途崩潰重啟之后依然可以從 failed 或者 pending 狀態(tài)恢復(fù)執(zhí)行。2.3 數(shù)據(jù)模型與存儲(chǔ)選型邏輯存儲(chǔ)這塊我是從簡(jiǎn)單出發(fā)最初直接用 SQLite。直到現(xiàn)在如果場(chǎng)景是單機(jī)處理SQLite 完全夠用。表結(jié)構(gòu)非常簡(jiǎn)潔CREATE TABLE events ( id INTEGER PRIMARY KEY AUTOINCREMENT, event_id TEXT UNIQUE NOT NULL, source TEXT NOT NULL, event_type TEXT NOT NULL, payload TEXT NOT NULL, status TEXT NOT NULL DEFAULT pending, priority INTEGER NOT NULL DEFAULT 0, retry_count INTEGER NOT NULL DEFAULT 0, created_at TIMESTAMP NOT NULL, updated_at TIMESTAMP NOT NULL ); CREATE INDEX idx_events_status_priority ON events(status, priority, created_at);這個(gè)表承擔(dān)了消息隊(duì)列和狀態(tài)存儲(chǔ)的雙重職責(zé)。很多剛接觸這個(gè)項(xiàng)目的朋友會(huì)問(wèn)為什么不直接用 RabbitMQ 或者 Kafka答案是看場(chǎng)景。對(duì)于內(nèi)部自動(dòng)化、Webhook 統(tǒng)一接入這類日吞吐量在幾萬(wàn)條以下的任務(wù)引入獨(dú)立消息中間件會(huì)增加部署成本和運(yùn)維成本。而且 SQLite 表天然支持 SQL 查詢消息審計(jì)、問(wèn)題排查非常方便。當(dāng)你真的需要橫向擴(kuò)容時(shí)把這個(gè)表?yè)Q到 Postgres再對(duì)處理進(jìn)程做多實(shí)例部署改動(dòng)成本并不高。選擇存儲(chǔ)方案的一個(gè)重要標(biāo)準(zhǔn)是你的消息量級(jí)是否值得引入一套額外的分布式系統(tǒng)。如果答案是不確定就用最簡(jiǎn)單可靠的方案起步。這個(gè)原則后來(lái)幫我省了非常多的時(shí)間。3. 規(guī)則引擎核心中的核心3.1 規(guī)則配置與條件匹配的設(shè)計(jì)思路Router 是整個(gè) hermes-agent 的決策大腦而規(guī)則引擎中的匹配條件則是大腦的每一個(gè)神經(jīng)元。我把條件匹配設(shè)計(jì)成三種形式覆蓋了絕大多數(shù)實(shí)際需求。第一種是 exact 等值匹配。就是消息某個(gè)字段的值等于某個(gè)固定值。適合場(chǎng)景來(lái)源是某個(gè)固定系統(tǒng)、事件類型是某個(gè)固定字符串。第二種是 regex 正則匹配。適合場(chǎng)景訂單號(hào)以 AB 開(kāi)頭、用戶郵箱屬于某個(gè)域名、請(qǐng)求路徑符合某個(gè)模式。正則匹配可以配置在 JSONPath 取值后的字符串上。第三種是 expression 表達(dá)式匹配。這是最靈活但也是我最謹(jǐn)慎使用的一種。你可以寫(xiě)一段簡(jiǎn)單的布爾表達(dá)式內(nèi)部通過(guò)受限的 eval 執(zhí)行不提供任意代碼執(zhí)行能力。屬性取值通過(guò) JSONPath 實(shí)現(xiàn)。統(tǒng)一配置方式如下rules: - name: high_value_order match: $type: all conditions: - field: $.payload.amount op: gt value: 5000 - field: $.event_type op: eq value: payment.paid priority: 90 actions: - executor: notify_executor params: channel: dingtalk template: high_value_order這條規(guī)則的意思是當(dāng)消息的 payload.amount 大于 5000且 event_type 等于 payment.paid就觸發(fā)一個(gè)高價(jià)值訂單的通知?jiǎng)幼?。priority 決定多條規(guī)則同時(shí)匹配時(shí)誰(shuí)先執(zhí)行。這個(gè)字段在設(shè)計(jì)早期被忽略過(guò)后來(lái)有人反饋說(shuō)同時(shí)命中財(cái)務(wù)通知和庫(kù)存通知時(shí)希望財(cái)務(wù)先跑才補(bǔ)上的。3.2 規(guī)則匹配的反向查詢優(yōu)化規(guī)則多了以后如果每條消息都遍歷所有規(guī)則去匹配性能會(huì)逐漸變差。我后來(lái)做了一項(xiàng)優(yōu)化反向索引。具體做法是啟動(dòng)時(shí)把所有規(guī)則的 event_type 條件提取出來(lái)建立字典然后按 event_type 快速定向到候選規(guī)則再進(jìn)一步做深度匹配。這個(gè)優(yōu)化把規(guī)則匹配的復(fù)雜度從 O(N) 降到接近 O(1)。實(shí)現(xiàn)上也很簡(jiǎn)單就是預(yù)處理階段class RuleIndex: def __init__(self, rules): self.event_type_map {} for rule in rules: for each_type in rule.get_match_event_types(): self.event_type_map.setdefault(each_type, []).append(rule) def find_candidates(self, event): types get_event_types(event.event_type) rules [] for t in types: rules.extend(self.event_type_map.get(t, [])) return deduplicate(rules)對(duì)于一條消息先用 event_type 快速篩出候選規(guī)則集合然后再逐條深度檢查完整條件極大減少了不必要的規(guī)則遍歷。從實(shí)際效果看規(guī)則數(shù)在三位數(shù)以內(nèi)時(shí)匹配耗時(shí)基本可以忽略。3.3 匹配失敗與未命中消息的處理策略做過(guò)通知系統(tǒng)的朋友應(yīng)該都有經(jīng)驗(yàn)最怕的就是消息沒(méi)匹配到規(guī)則然后靜默丟失。你根本不知道它丟了直到業(yè)務(wù)方來(lái)問(wèn)為什么我沒(méi)有收到消息。hermes-agent 對(duì)這一塊的處理是未命中的消息不丟棄統(tǒng)一進(jìn)入 unmatched 表同時(shí)提供管理接口可以查詢。這樣你可以定期復(fù)盤是否有新的消息類型需要添加規(guī)則。我見(jiàn)過(guò)不少系統(tǒng)從一開(kāi)始的忽略異常到后來(lái)接二連三出問(wèn)題根源就是沒(méi)有負(fù)面消息的可見(jiàn)性。我的建議是把未命中消息當(dāng)成一等公民對(duì)待它們和正常消息一樣重要。4. 執(zhí)行器的設(shè)計(jì)與實(shí)踐從腳本到插件的演進(jìn)4.1 執(zhí)行器接口設(shè)計(jì)與注冊(cè)管理執(zhí)行器是 hermes-agent 真正干活的部分。我定義了一個(gè)非常簡(jiǎn)潔的抽象接口class BaseExecutor: async def execute(self, event: Event, params: dict) - ExecResult: raise NotImplementedError每個(gè)執(zhí)行器只需要實(shí)現(xiàn)一個(gè) execute 方法。事件通過(guò)參數(shù)傳入執(zhí)行參數(shù)通過(guò) params 傳入。返回值是一個(gè) ExecResult包含 success、output、message、duration_ms 等字段方便持久化和追蹤。注冊(cè)機(jī)制方面我通過(guò)一個(gè)全局注冊(cè)表實(shí)現(xiàn)EXECUTOR_REGISTRY {} def register_executor(name): def decorator(cls): EXECUTOR_REGISTRY[name] cls return cls return decorator然后在每個(gè)執(zhí)行器文件里加上裝飾器??蚣軉?dòng)時(shí)把所有執(zhí)行器文件 import 一遍注冊(cè)表里就有了全量執(zhí)行器。規(guī)則配置里指定 executor 名稱Router 就能根據(jù)注冊(cè)表找到對(duì)應(yīng)類并實(shí)例化調(diào)用。新增執(zhí)行器完全不需要修改框架代碼做到了可插拔。4.2 幾個(gè)常用執(zhí)行器的實(shí)現(xiàn)細(xì)節(jié)HttpExecutor 是最常用的執(zhí)行器之一。它負(fù)責(zé)把事件轉(zhuǎn)發(fā)給其他內(nèi)部服務(wù)。具體實(shí)現(xiàn)時(shí)有兩個(gè)細(xì)節(jié)容易踩坑超時(shí)控制和重試策略。register_executor(http_executor) class HttpExecutor(BaseExecutor): async def execute(self, event, params): url params.get(url) method params.get(method, POST) payload event.payload timeout params.get(timeout, 10) async with aiohttp.ClientSession() as session: try: async with session.request(method, url, jsonpayload, timeoutaiohttp.ClientTimeout(totaltimeout)) as resp: body await resp.text() return ExecResult(successTrue, outputbody, messagefstatus{resp.status}) except asyncio.TimeoutError: return ExecResult(successFalse, messageftimeout after {timeout}s)重試不用在 HttpExecutor 里做因?yàn)橹卦囀窍⑻幚砜蚣軐用娴穆氊?zé)。執(zhí)行器只負(fù)責(zé)返回結(jié)果框架根據(jù)結(jié)果和配置決定要不要重試。這個(gè)職責(zé)邊界從設(shè)計(jì)之初就明確下來(lái)了避免執(zhí)行器里塞進(jìn)太多與業(yè)務(wù)無(wú)關(guān)的邏輯。PythonExecutor 比較特殊它允許在規(guī)則配置里指定一段腳本路徑框架動(dòng)態(tài)加載并執(zhí)行。這里有一個(gè)安全邊界腳本等同于本地代碼執(zhí)行權(quán)限等同于框架進(jìn)程本身。所以它只適合內(nèi)部環(huán)境下執(zhí)行可信代碼不適合對(duì)外開(kāi)放成多租戶執(zhí)行能力。NotifyExecutor 負(fù)責(zé)發(fā)送通知。支持釘釘、企業(yè)微信、郵件、飛書(shū)這些常見(jiàn)的通知渠道??紤]到外部 API 不穩(wěn)定這類執(zhí)行器最容易失敗所以通知類消息的重試策略通常配置得比較積極。4.3 執(zhí)行器的超時(shí)控制、并發(fā)與資源限制處理消息的時(shí)候最怕某個(gè)執(zhí)行器出問(wèn)題導(dǎo)致整個(gè)進(jìn)程卡死。所以從第一天起超時(shí)控制就是執(zhí)行器運(yùn)行的關(guān)鍵約束??蚣転槊看螆?zhí)行器調(diào)用都包裹了 asyncio.wait_for強(qiáng)制超時(shí)try: result await asyncio.wait_for(executor_instance.execute(event, params), timeouttimeout) except asyncio.TimeoutError: result ExecResult(successFalse, messageexecutor timeout)并發(fā)控制方面hermes-agent 支持配置最大并發(fā)數(shù)。默認(rèn)是 20也就是同一時(shí)間最多 20 個(gè)任務(wù)在跑。超過(guò)的部分排隊(duì)等待。這個(gè)設(shè)計(jì)是為了避免某個(gè)瞬間大量消息涌入時(shí)打爆下游系統(tǒng)。對(duì)于危險(xiǎn)操作類的執(zhí)行器比如刪除文件、清理數(shù)據(jù)庫(kù)數(shù)據(jù)我建議在 Executor 內(nèi)部增加二次確認(rèn)邏輯。規(guī)則配置里需要顯式設(shè)置confirm: true否則直接返回失敗。雖然增加了配置復(fù)雜度但在生產(chǎn)環(huán)境里這個(gè)保障非常重要。5. 可靠性設(shè)計(jì)重試、冪等與死信隊(duì)列5.1 重試策略與退避算法消息處理不可能永遠(yuǎn)一次成功。網(wǎng)絡(luò)抖動(dòng)、下游服務(wù)重啟、第三方接口超時(shí)這些都是常態(tài)。重試策略是整個(gè)可靠性設(shè)計(jì)中最重要的部分。hermes-agent 里的重試策略是四級(jí)退避第一次失敗后等 5 秒第二次 30 秒第三次 5 分鐘第四次 30 分鐘。超過(guò)四次仍然失敗消息進(jìn)入死信隊(duì)列。這個(gè)策略的經(jīng)驗(yàn)依據(jù)是大部分瞬時(shí)故障在前幾次重試時(shí)就能恢復(fù)如果 30 分鐘后還不行大概率不是瞬時(shí)問(wèn)題了沒(méi)必要無(wú)限重試。實(shí)現(xiàn)上我把重試信息放在消息的元數(shù)據(jù)里dataclass class RetryPolicy: max_retries: int 4 base_delay: int 5 multiplier: int 6 max_delay: int 1800每次重試的延遲時(shí)間 base_delay * multiplier^retry_count不超過(guò) max_delay。這個(gè)算法簡(jiǎn)單明了不需要引入復(fù)雜的指數(shù)退避庫(kù)。5.2 冪等設(shè)計(jì)避免重復(fù)執(zhí)行帶來(lái)副作用重試機(jī)制帶來(lái)的一個(gè)直接問(wèn)題是消息可能被處理不止一次。比如執(zhí)行器成功了但是由于網(wǎng)絡(luò)原因響應(yīng)沒(méi)有及時(shí)寫(xiě)回框架判斷超時(shí)后重試于是同一個(gè)事件被執(zhí)行了兩次。這是所有分布式任務(wù)系統(tǒng)都躲不開(kāi)的問(wèn)題唯一的解法就是冪等設(shè)計(jì)。冪等有兩種做法。第一種是業(yè)務(wù)層冪等你在自己的業(yè)務(wù)代碼里判斷這個(gè)訂單是否已經(jīng)被處理過(guò)了處理過(guò)就什么都不做直接返回成功。這種做法需要業(yè)務(wù)方配合。第二種是框架層冪等框架記錄每條消息的執(zhí)行指紋指紋相同的結(jié)果直接用不實(shí)際執(zhí)行。hermes-agent 在框架層面做了一個(gè)簡(jiǎn)單的保護(hù)。給每條事件生成 event_id這個(gè) ID 在消息源頭生成并隨消息攜帶。事件表里 event_id 是唯一索引同一事件重復(fù)寫(xiě)入直接失敗。處理成功之后這個(gè) ID 會(huì)回寫(xiě)到一個(gè)已處理表再次收到同 ID 的事件時(shí)直接返回成功。但要注意框架層的冪等保護(hù)沒(méi)法覆蓋執(zhí)行器已經(jīng)開(kāi)始干活但是結(jié)果沒(méi)記錄這種情況。所以我的建議是所有 Executor 在編寫(xiě)時(shí)都把事件已經(jīng)處理過(guò)當(dāng)成正常情況來(lái)處理不要拋出異常。把冪等當(dāng)成一種設(shè)計(jì)習(xí)慣而不是框架約束。5.3 死信隊(duì)列與人工介入流程死信隊(duì)列DLQ是消息系統(tǒng)的最后一道防線。我已經(jīng)設(shè)置了合理的重試次數(shù)和退避策略如果消息最終還是處理失敗就說(shuō)明靠自動(dòng)重試解決不了問(wèn)題。此時(shí)消息進(jìn)入 DLQ等待人工介入或后續(xù)補(bǔ)償腳本。在 hermes-agent 的管理界面上DLQ 消息可見(jiàn)、可查詢、可重新投遞。我通常的做法是先查詢 DLQ 里的消息內(nèi)容和失敗原因確認(rèn)問(wèn)題后修復(fù)比如配置錯(cuò)誤、依賴服務(wù)恢復(fù)然后在界面上點(diǎn)擊重新投遞消息會(huì)重新進(jìn)入 pending 狀態(tài)再走一遍處理流程。這里我給一個(gè)建議DLQ 里的消息需要定期檢查不要讓它靜默增長(zhǎng)??梢栽?hermes-agent 旁邊掛一個(gè)簡(jiǎn)單的 cron每天統(tǒng)計(jì) DLQ 數(shù)量超過(guò)閾值就發(fā)告警給你。不然時(shí)間久了積壓的失敗消息會(huì)變成一座沒(méi)人想動(dòng)的山。6. 實(shí)戰(zhàn)項(xiàng)目搭建一個(gè)統(tǒng)一的 Webhook 接收器6.1 場(chǎng)景與需求定義這個(gè)實(shí)戰(zhàn)項(xiàng)目來(lái)自一個(gè)真實(shí)需求。我們內(nèi)部有好幾個(gè)服務(wù)需要暴露 Webhook 給第三方調(diào)用包括支付回調(diào)、物流狀態(tài)回傳、短信狀態(tài)報(bào)告。每個(gè)服務(wù)的回調(diào)地址不同、驗(yàn)簽方式不同、處理邏輯不同。最麻煩的是某些第三方平臺(tái)的 Webhook 對(duì)響應(yīng)時(shí)間要求極高超過(guò) 2 秒就判定失敗并開(kāi)始重試。需求匯總下來(lái)有三點(diǎn)統(tǒng)一 Webhook 入口一個(gè)地址接收所有第三方事件。回調(diào)立刻返回 200具體邏輯異步處理。驗(yàn)簽邏輯可配置消息處理結(jié)果可追溯。6.2 配置實(shí)戰(zhàn)多來(lái)源接入與驗(yàn)簽我在 hermes-agent 里配置了三個(gè) Collector分別監(jiān)聽(tīng)三個(gè)路徑/hooks/payment、/hooks/logistics、/hooks/sms。每個(gè) Collector 綁定一個(gè)來(lái)源名稱同時(shí)可以配置該來(lái)源的驗(yàn)簽規(guī)則。為了演示我用支付回調(diào)的 HMAC-SHA256 簽名方式作為例子。collectors: - name: payment_hook path: /hooks/payment source: payment_callback verify: type: hmac_sha256 secret_env: PAYMENT_HOOK_SECRET header: X-Signature body_from: raw驗(yàn)簽邏輯不算復(fù)雜。第三方平臺(tái)用密鑰對(duì)請(qǐng)求體做 HMAC-SHA256 簽名放在 Header 里傳過(guò)來(lái)。hermes-agent 收到請(qǐng)求后用同樣的算法和密鑰計(jì)算簽名和 Header 里的值做比對(duì)。不一致就返回 401保持一致則繼續(xù)處理。這個(gè)驗(yàn)簽過(guò)程看起來(lái)簡(jiǎn)單但實(shí)際有一個(gè)非常重要的細(xì)節(jié)驗(yàn)簽必須使用原始請(qǐng)求體不能先解碼 JSON 再重新序列化。因?yàn)?JSON 鍵值順序變化會(huì)導(dǎo)致簽名不一致。我在代碼里專門保留了原始 body 字節(jié)用于驗(yàn)簽解析 JSON 放在驗(yàn)簽通過(guò)之后。這個(gè)坑非常隱蔽希望看到這里的讀者能記住。6.3 實(shí)戰(zhàn)踩坑第三方回調(diào)的響應(yīng)超時(shí)問(wèn)題這個(gè)項(xiàng)目的第一個(gè)線上問(wèn)題就出在回調(diào)響應(yīng)超時(shí)上。某個(gè)物流平臺(tái)的 Webhook 配置了 HTTP 超時(shí)時(shí)間為 2 秒。hermes-agent 收到回調(diào)后需要驗(yàn)簽、解析、寫(xiě)入 SQLite 數(shù)據(jù)庫(kù)、再返回 200。正常情況下整個(gè)過(guò)程在幾十毫秒內(nèi)完成。但某個(gè)時(shí)間段內(nèi)由于服務(wù)器的磁盤 I/O 出現(xiàn)偶發(fā)高延遲SQLite 寫(xiě)入超過(guò)了 2 秒導(dǎo)致上游平臺(tái)判定超時(shí)并重試。重試又帶來(lái)了重復(fù)消息處理邏輯里冪等沒(méi)做好部分物流狀態(tài)被重復(fù)回寫(xiě)。這個(gè)問(wèn)題的教訓(xùn)是雙重的。第一Webhook 接口的數(shù)據(jù)庫(kù)寫(xiě)入不能放在返回響應(yīng)的路徑上。我的修復(fù)方案是HTTP Collector 先寫(xiě)內(nèi)存隊(duì)列立刻返回 200后臺(tái)異步批量沖刷到 SQLite。內(nèi)存隊(duì)列的可靠性可以通過(guò)定時(shí)持久化快照來(lái)保障。第二冪等保護(hù)在任何可能重試的入口都必須做好即使你認(rèn)為概率很低。7. 性能優(yōu)化與壓測(cè)結(jié)果7.1 基于 asyncio 的并發(fā)模型背后的選擇理由我在最初選擇 asyncio 而不是多線程核心原因是這個(gè)項(xiàng)目的 IO 密集特性非常明顯接收 HTTP 請(qǐng)求、讀寫(xiě) SQLite、調(diào)用第三方接口、發(fā)送通知。這些都是 IO 等待沒(méi)有明顯的 CPU 密集計(jì)算。asyncio 在單線程內(nèi)用事件循環(huán)處理海量并發(fā)開(kāi)銷遠(yuǎn)小于線程切換且沒(méi)有線程安全問(wèn)題。代價(jià)是要小心不要寫(xiě)阻塞代碼。比如不要在 Executor 里用 requests 同步調(diào)用必須用 aiohttp不要直接調(diào) time.sleep必須用 await asyncio.sleep數(shù)據(jù)庫(kù)操作要么用異步驅(qū)動(dòng)要么把阻塞操作丟給線程池。初期我在這上面踩了不少坑比如某個(gè) Executor 里用了同步 SQLite 查詢結(jié)果整個(gè)事件循環(huán)被卡住所有消息處理都跟著變慢。7.2 單機(jī)壓測(cè)數(shù)據(jù)吞吐與延遲表現(xiàn)在一臺(tái) 4 核 8GB 的普通云服務(wù)器上我用 locust 對(duì) hermes-agent 做了壓測(cè)。模擬客戶端持續(xù) POST 請(qǐng)求每條消息大小約為 1KB。事件處理邏輯為空操作只做規(guī)則匹配和落庫(kù)。壓測(cè)結(jié)果穩(wěn)定狀態(tài)下每秒處理約 500 條消息P95 延遲為 60 毫秒P99 延遲為 120 毫秒。消息從接收到進(jìn)入 pending 隊(duì)列再被處理完成整體耗時(shí)平均在 300 毫秒左右。如果把規(guī)則匹配加上每條消息平均匹配 50 條規(guī)則吞吐量下降到 300 QPS但 P99 延遲仍在 200 毫秒以內(nèi)。對(duì)于內(nèi)部自動(dòng)化場(chǎng)景這個(gè)性能完全足夠。7.3 壓測(cè)中暴露的瓶頸與優(yōu)化過(guò)程壓測(cè)暴露的第一個(gè)瓶頸是 SQLite 單條插入性能。每條消息獨(dú)立 INSERT 提交在事務(wù)開(kāi)銷上浪費(fèi)了不少時(shí)間。優(yōu)化方案是批量插入攢一批消息后統(tǒng)一提交使寫(xiě)入吞吐量提升了一倍以上。這個(gè)批次大小我調(diào)到了 100 條一批平衡了延遲和吞吐。第二個(gè)瓶頸是規(guī)則深度匹配中的正則表達(dá)式操作。正則匹配雖然靈活但 CPU 開(kāi)銷明顯高于等值匹配。優(yōu)化方案是給規(guī)則增加條件預(yù)篩階段先用 JSONPath 取出的值做一次快速數(shù)據(jù)類型和長(zhǎng)度判斷過(guò)濾掉明顯不匹配的規(guī)則再進(jìn)入正則不歸。實(shí)際效果是把規(guī)則匹配整體耗時(shí)降低了 40%。第三個(gè)優(yōu)化是熱點(diǎn)路徑上的日志修改。壓測(cè)時(shí) statsd 和日志輸出占用了不少 CPU。我把每條消息處理的 DEBUG 日志改成按采樣率輸出比如每 100 條記錄一次整體性能提升明顯。對(duì)于日志這個(gè)點(diǎn)線上環(huán)境和壓測(cè)環(huán)境最大的區(qū)別就是線上大量無(wú)意義日志會(huì)把系統(tǒng)拖垮保留關(guān)鍵日志、關(guān)閉頻繁的 DEBUG 日志才是工程化做法。8. 部署與運(yùn)維實(shí)踐8.1 單機(jī) Docker 部署方案hermes-agent 的部署很簡(jiǎn)單。我提供了一個(gè) Dockerfile基于 python:3.11-slim 構(gòu)建體積控制在 200MB 以內(nèi)。整個(gè)鏡像只暴露一個(gè)端口通過(guò)環(huán)境變量注入配置。FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . ENV HERMES_CONFIG/app/config/config.yaml EXPOSE 8080 CMD [python, -m, hermes_agent]啟動(dòng)命令也簡(jiǎn)單docker build -t hermes-agent:latest . docker run -d --name hermes-agent \ -p 8080:8080 \ -v /data/hermes:/app/data \ -e HERMES_CONFIG/app/config/config.yaml \ --restart unless-stopped \ hermes-agent:latest將數(shù)據(jù)目錄掛在宿主機(jī)上的好處是升級(jí)鏡像時(shí)數(shù)據(jù)不丟排錯(cuò)時(shí)可以直接查看 SQLite 文件和日志。8.2 配置管理環(huán)境變量與敏感信息配置管理這一塊我遵循的原則是非敏感配置放 YAML 文件敏感配置放環(huán)境變量。支付密鑰、數(shù)據(jù)庫(kù)密碼這類信息直接寫(xiě)在 YAML 里并且提交到代碼倉(cāng)庫(kù)是極其危險(xiǎn)的做法一旦代碼泄漏全部密鑰跟著泄漏。在實(shí)際部署中我通過(guò)環(huán)境變量注入這些敏感信息配置文件中只引用變量名。import os from dotenv import load_dotenv load_dotenv() PAYMENT_HOOK_SECRET os.getenv(PAYMENT_HOOK_SECRET)建議在 CI/CD 流水線中把生產(chǎn)環(huán)境的密鑰存儲(chǔ)在專門的密鑰管理服務(wù)中運(yùn)行時(shí)注入。即使是內(nèi)部系統(tǒng)的密鑰也不能因?yàn)橛X(jué)得沒(méi)那么重要就放松管理。8.3 日志規(guī)范與健康檢查接口hermes-agent 的日志統(tǒng)一輸出為 JSON 格式字段包括時(shí)間、級(jí)別、event_id、source、event_type、執(zhí)行器名稱、耗時(shí)、結(jié)果狀態(tài)。方便接入 ELK 或 Loki 做日志搜索。統(tǒng)一的 JSON 日志格式我堅(jiān)持了很久因?yàn)榕挪閱?wèn)題的時(shí)候跨字段關(guān)聯(lián)查詢比在純文本日志里用 grep 高效得多。健康檢查接口在/healthz上返回 200。檢查內(nèi)容包括進(jìn)程是否存活、SQLite 是否能正常讀寫(xiě)、掛起的 pending 消息數(shù)量是否超過(guò)閾值、最近 10 分鐘的錯(cuò)誤率等。K8s 或 Docker Compose 的健康檢查探針可以把它配置為探活地址。8.4 消息積壓與延遲的監(jiān)控指標(biāo)運(yùn)營(yíng) hermes-agent 的過(guò)程中我最關(guān)心的指標(biāo)有三個(gè)pending 消息數(shù)、處理延遲和執(zhí)行失敗率。這三個(gè)指標(biāo)分別對(duì)應(yīng)消息積壓、系統(tǒng)健康度和執(zhí)行質(zhì)量。pending 消息數(shù)可以通過(guò)一條 SQL 獲取SELECT status, COUNT(*) FROM events GROUP BY status;處理延遲指標(biāo)我通過(guò)記錄消息從 received_at 到 updated_at 的時(shí)間差在管理儀表盤上畫(huà)出分位數(shù)值。正常情況下 P95 應(yīng)該在 2 秒以下。如果某段時(shí)間 P95 突然上升基本可以判斷是某個(gè)執(zhí)行器變慢或者下游服務(wù)出現(xiàn)問(wèn)題。9. 項(xiàng)目演進(jìn)與多實(shí)例擴(kuò)展9.1 從 SQLite 遷移到 Postgres當(dāng)消息量增大到日均幾十萬(wàn)條時(shí)單機(jī) SQLite 開(kāi)始成為瓶頸。遷移到 Postgres 是自然的演進(jìn)方向。我在存儲(chǔ)層抽象了一個(gè)接口SQLite 和 Postgres 各實(shí)現(xiàn)一份切換時(shí)只需要改配置。表結(jié)構(gòu)幾乎不變只有數(shù)據(jù)類型上做了一些調(diào)整比如 TIMESTAMP 帶時(shí)區(qū)、JSON 字段用 JSONB 類型。storage: type: postgres dsn: postgresql://hermes:passwordlocalhost:5432/hermes9.2 多實(shí)例運(yùn)行時(shí)的任務(wù)鎖與消息分區(qū)Postgres 版本支持多實(shí)例部署也就是多個(gè) hermes-agent 進(jìn)程同時(shí)消費(fèi)同一個(gè)消息表。這里的關(guān)鍵問(wèn)題是不能讓兩個(gè)實(shí)例同時(shí)拿到同一條 pending 消息。解決辦法是使用 Postgres 的行級(jí)鎖通過(guò) SELECT FOR UPDATE SKIP LOCKED 實(shí)現(xiàn)安全的消息領(lǐng)取。SELECT * FROM events WHERE status pending ORDER BY priority DESC, created_at ASC LIMIT 1 FOR UPDATE SKIP LOCKED;這個(gè) SQL 的意思是鎖定并返回一條 pending 消息如果該行已經(jīng)被其他事務(wù)鎖定則跳過(guò)它不會(huì)阻塞等待。這讓多個(gè)實(shí)例可以并行安全地消費(fèi)消息無(wú)需額外引入分布式鎖。實(shí)際測(cè)試中3 個(gè)實(shí)例部署時(shí)吞吐量基本能線性擴(kuò)展到 1200 QPS。9.3 多執(zhí)行器協(xié)作的編排能力單條規(guī)則只能綁定一個(gè)動(dòng)作這個(gè)限制在復(fù)雜場(chǎng)景下會(huì)顯得不夠用。例如用戶下單后需要同時(shí)完成扣庫(kù)存、通知發(fā)貨、記錄財(cái)務(wù)流水這三個(gè)動(dòng)作如果失敗其中一個(gè)其他兩個(gè)應(yīng)該如何處理這就需要編排能力。為此我在新版本里引入了 action chain 的概念actions: - executor: inventory_executor params: operation: deduct - executor: financial_executor params: operation: record - executor: notify_executor params: channel: dingtalk template: order_created默認(rèn)情況下同一規(guī)則下的多個(gè)動(dòng)作按順序執(zhí)行前一個(gè)失敗則后續(xù)中斷。你也可以配置為并發(fā)執(zhí)行或者允許部分失敗繼續(xù)。這個(gè)編排能力讓 hermes-agent 從單純的消息轉(zhuǎn)發(fā)進(jìn)化為一個(gè)輕量級(jí)的任務(wù)調(diào)度引擎。9.4 多智能體協(xié)作模式的探索目前版本的 hermes-agent 支持讓執(zhí)行器反過(guò)來(lái)向消息隊(duì)列寫(xiě)入新事件這為多智能體協(xié)作提供了可能。例如一個(gè)訂單超時(shí)監(jiān)控執(zhí)行器發(fā)現(xiàn)訂單存在異常它可以生成一條新事件交給另一個(gè)專門處理異常的執(zhí)行器處理。Agent A 處理完自己的部分把結(jié)果作為新消息發(fā)布出來(lái)Agent B 接住再處理下一環(huán)。這樣的好處是處理鏈路上每個(gè)節(jié)點(diǎn)都清晰可追蹤天然支持分布式部署。這個(gè)模式我目前還在實(shí)踐中探索比如用于消息分片后的并行處理、跨部門業(yè)務(wù)鏈路的自動(dòng)化等場(chǎng)景。對(duì)于已經(jīng)上手的團(tuán)隊(duì)這可能是把 hermes-agent 能力翻倍的關(guān)鍵方向。10. 遇到問(wèn)題時(shí)的排查思路與實(shí)操經(jīng)驗(yàn)10.1 消息處理失敗但日志沒(méi)有明顯報(bào)錯(cuò)這種情況遇到過(guò)好幾次。排查的第一步是先確認(rèn)事件目前的狀態(tài)是 failed 還是 success如果是 failed去 events 表里看 retry_count 字段判斷是執(zhí)行器主動(dòng)返回失敗還是框架重試后放棄。第二步查看失敗執(zhí)行器的 message 字段框架會(huì)把 Executor 返回的失敗原因記錄進(jìn)去。第三步看 framework 日志重點(diǎn)查找該 event_id 對(duì)應(yīng)的執(zhí)行記錄和異常堆棧。這類問(wèn)題的根源往往是 Executor 內(nèi)部吞掉了異常返回了一個(gè)本該拋出的結(jié)果。實(shí)際排查一次之后定位到某個(gè)腳本里用了 try...except... 把異常吃掉并直接返回成功導(dǎo)致框架認(rèn)為執(zhí)行成功但實(shí)際上業(yè)務(wù)處理并沒(méi)有完成。這個(gè)教訓(xùn)后來(lái)讓我養(yǎng)成了一個(gè)習(xí)慣執(zhí)行器內(nèi)部絕不允許無(wú)差別捕獲異常后靜默通過(guò)必須顯式返回失敗結(jié)果。10.2 消息重復(fù)消費(fèi)問(wèn)題消息重復(fù)消費(fèi)的排查思路我每次都是先確認(rèn)事件表里 event_id 是否存在重復(fù)記錄。如果存在說(shuō)明消息源頭或接入層已經(jīng)產(chǎn)生了重復(fù)事件。如果不存在但業(yè)務(wù)層面處理了兩次說(shuō)明是執(zhí)行器冪等設(shè)計(jì)有問(wèn)題。一個(gè)具體的案例是某執(zhí)行器在調(diào)用下游接口時(shí)由于框架超時(shí)重試同一事件被執(zhí)行了兩次但兩次執(zhí)行都改了不同字段所以業(yè)務(wù)數(shù)據(jù)變得不一致。解決辦法是在執(zhí)行器里增加一個(gè)基于 event_id 的處理記錄表每次執(zhí)行前先檢查是否已經(jīng)執(zhí)行過(guò)。10.3 規(guī)則匹配結(jié)果和預(yù)期不符規(guī)則匹配問(wèn)題是日常排查里見(jiàn)得最多的一類。寫(xiě)規(guī)則的時(shí)候想的是應(yīng)該匹配這類消息結(jié)果實(shí)際運(yùn)行時(shí)不匹配或者錯(cuò)誤匹配了。排查步驟一般是先在管理界面查看實(shí)際消息的完整內(nèi)容確認(rèn) event_type、source 等關(guān)鍵字段值再打開(kāi) Debug 模式輸出規(guī)則匹配時(shí)的條件逐項(xiàng)判斷結(jié)果看具體是哪個(gè)條件不滿足或誤匹配。有一次排查到最后發(fā)現(xiàn)問(wèn)題竟然出在 YAML 配置文件里有人把鍵的縮進(jìn)寫(xiě)錯(cuò)了導(dǎo)致條件層級(jí)與預(yù)期不同匹配邏輯完全變了。這類問(wèn)題光看配置很難發(fā)現(xiàn)最好給規(guī)則文件加一個(gè)本地校驗(yàn)工具在 CI 階段檢查 YAML 格式和必需字段。11. 個(gè)人經(jīng)驗(yàn)總結(jié)與未來(lái)方向這個(gè)項(xiàng)目從最初的一個(gè)內(nèi)部腳本逐漸演化成了帶規(guī)則引擎、執(zhí)行器插件、重試機(jī)制和管理界面的輕量級(jí) agent 框架。整個(gè)過(guò)程中我最深的體會(huì)有三點(diǎn)。第一輕量是王道。能用一個(gè)進(jìn)程解決的事情就不要引入一整個(gè)微服務(wù)架構(gòu)。很多項(xiàng)目在初期規(guī)模很小的時(shí)候就把組件拆得滿天飛實(shí)際上每個(gè)組件都增加了排查問(wèn)題的復(fù)雜度。hermes-agent 選擇用 SQLite 起步、用 YAML 做配置這個(gè)能不依賴就不依賴的理念幫助它快速落地并且在真實(shí)場(chǎng)景中穩(wěn)定運(yùn)行。第二消息處理系統(tǒng)的核心價(jià)值在于可追蹤性。消息從哪兒來(lái)、被誰(shuí)處理、處理成功還是失敗、失敗原因是什么這些信息必須完整記錄。很多系統(tǒng)出問(wèn)題無(wú)法定位就是因?yàn)橄⑻幚礞溌泛诤谢?。我設(shè)計(jì) hermes-agent 時(shí)花費(fèi)了大量精力在事件狀態(tài)、執(zhí)行結(jié)果、日志格式這些看起來(lái)不性感但實(shí)際極其重要的細(xì)節(jié)上最終實(shí)踐證明這些都是值得的。第三冪等設(shè)計(jì)比重試機(jī)制更重要。沒(méi)有業(yè)務(wù)冪等做支撐重試機(jī)制反而會(huì)放大問(wèn)題。無(wú)論你用的是消息隊(duì)列、定時(shí)任務(wù)還是 Webhook都要養(yǎng)成同一事件可以重復(fù)執(zhí)行且結(jié)果一致的設(shè)計(jì)習(xí)慣。如果你也想自己實(shí)現(xiàn)一個(gè)類似的 agent 框架我建議你從最基礎(chǔ)的消息類型和狀態(tài)流轉(zhuǎn)開(kāi)始做先跑通一條完整鏈路再逐步加規(guī)則、執(zhí)行器、重試這些復(fù)雜度。直接在項(xiàng)目初期設(shè)計(jì)一個(gè)面條式的大框架容易讓自己陷入細(xì)節(jié)不可自拔。一個(gè)穩(wěn)定可靠的小系統(tǒng)遠(yuǎn)勝過(guò)一個(gè)看起來(lái)功能完整但處處漏風(fēng)的大架構(gòu)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人人操肉肉| 333kkkk·亚洲com久久| 亚州综合色图| 亚洲操逼网| 搡老女人老91妇女老熟女| 黄呦呦在线| 爆操无码| 99热国产| 一区二区三区黄色片a| 欧美综合狠| 91精品久久久久久77777| 日韩熟女操逼| 久久久久成人网| 亚洲美女精品| 亚洲精品人妻吞精av| 色五月AV| 成人怡红院| 亚洲大色堂| 亚洲熟妇自偷自拍另欧美| 強姦亂倫a| 人妻喷水| 99综合自拍| 四虎精品一区| 后入人妻无码| 欧日韩一二三f区| 久久精品视频28| 丁香五月影院| 久久婷婷色| www.黄色在线| 翔田千里无码中出中文字幕| 老司机午夜精品视频| 青青草中出视频| 2019天天操天天爽天天拍| 中文字幕二区日韩天堂| 爱射综合| 99久久综合| 黄片免费久久久久久久| 亚洲免费成人在线高清无码视频| 亚洲熟女av中文字幕| 91精品免费| 第二页中文字幕| 69超碰综合| 综合色色网| 久精品无码av一区二免费国产在线观看| 亚洲AV成人精品网站在AV| 懂色Av一区二区三区| 日本熟妇自慰性高潮一区二区三区| 一区二区三区日韩欧美 | 欧美一区二区亚洲天堂| 天天弄欧美| 久久精品视频久久久| 日韩三级一区| 不卡人妻少妇精品毛片一区23区视频| 91狠婷| 综合色图亚洲欧美| 久久亚洲不卡| 青青操少妇| 日日干日日操五月天伦理视频| 成人影 天天操 亚洲| 神马久久69| 嗯嗯啊中文字幕| 婷婷五月色| 狠狠操狠狠| 这里只有精品视频| 91N欧美| 91足交| 在线观看国产黄色| 看看小穴| 极品后入免费视频| 最新精品久久蜜桃| 天天干1区2区在线| 哈哈操电影| 午夜舔阴达高潮视频免费看| 又粗又长又爽在线观看| 国产又粗又长又爽又色| 日日夜夜天天| 久久国产对白激情浪潮| 日本不卡高清免v欧美日韩在线观看| 97亚洲在线| 九九成人| 涩爱AV在线| 偷拍2020| 亚洲激情视频| 日韩欧美经典在线观看| 色诱中文字幕| 97在线日韩中文字幕| 91宗合网| 精品国产乱码久久久久久免费| 亚洲精品乱码线路中文字幕 | 久久黄黄黄| 天天色欧美| 亚洲国产欧美一区二区潘金莲| 高清无码 国产精品| 东京热男人的天堂网| 丝袜AV一区二区三区| 殴美性天天| 日韩性爱小视频| 亚洲AV噜噜狠狠网址蜜桃动漫| 国产成人精品日本视频| 欧洲中文字幕| 肥佬影院91| TS人妖另类精品视频系列| 国产av波波国产精品| 天天操天天舔| 制服诱惑亚洲一区二区三区在线观看| 女生91网站| AA特级绝黄| 国产十八禁视频| 91久久堂| 中文字幕一区二区三区四区在线视频| 床上啊啊啊一区二区三区| 午夜福利久久久噜久噜久久综合| 久草资源在线| 欧美性生活综合| 91麻豆天美国产| 一起草视频在线| 亚洲成人av电影在线| 97干com| 精品少妇高潮久久| 一级黄色牲爱A级片| A啊啊在线观看| 亚洲一区二区在线观看91| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 涩涩涩综合| 婷婷在线视频在线观看| 久久天天艹| 亚洲欧美日韩夜夜| 国产绿奴视频在线观看| 嗯嗯嗯嗯啊啊啊好紧好大| 黑人精品久久97| 中文色综合| 97干日韩| 97日韩| 亚洲一本色道中文无码aV天美| 人妻精品综合中文字幕在线| 五月天亚洲色图| 五月婷婷激情综合| 亚洲色图A| 国产精品视频精品一二| 91操操| 久男人久久| 精品一区二区成人| 青青草黑寡妇男人天堂| 韩国免费播放一级毛片| 欧美少妇性乱| 欧美aaaaaaa| 日日爽熟女| 欧美婷婷五月天| 亚洲性综合11| 日本在线一二| 岛国福利在线精品播放| 99re在线视频这里只有精品| 国产精品一区二区麻豆| 色色国产| 中文字幕在线免费观看2| 亚洲五月丁香花狠狠干一区二区三区| 亚洲图片另类| 婷婷伊人一区| 成人线上超碰| 精品少妇高潮久久| 亚洲人妻一区二区三区| 亚洲成人激情小说视频| 久久人妻少妇| 男人的天堂一区三区| 天天影视之亚洲综合网| 国产丰满少妇久久久精品影院| 亚洲欧洲综合av在线| 久久偷偷色综合蜜桃| 亚洲少妇中文字幕网址| 1000部熟女视频在线观看| 偷拍在线观看视频| 青青草中出视频| 亚洲天堂男人在线| 色色香蕉| 1240青青草一区二区三区视频天爱| 国产精品熟女AV中文字幕在线播放| 中国一级操逼视频| 国产路线专区| 色天堂在线观看| 精品人人插人人操| 香伊人在线| 郑州宾馆老熟女露脸啪啪| 国产三级中文有码在线视频| 干少妇视频| 欧美另类自拍 | 看免费的黄片| 亚洲丝袜二区在线| 99爱久久视频频| 黄色一区二区秘书性感| 9久久久久| 久久久久久久久久久999| 91足交| 亚洲欧洲激情卡通另类文学四射小说网站 | 最新三级网址| 国产老女人久久毛| 综合 亚洲 欧美| 嫩草影院永久在线制服丝袜| 玖色AV| 久久久久久九九九九| 久久骚少妇| 九九九九AV| 久久久久久久久久久久久久久久9| 日韩女模中文造逼| 免费精品人妻一区二区三| 欧美美女视频| 蜜臀中文无码午夜| 偷拍2020| 亚洲另类色综合网站| 伊人青青草久久| 人妻碰碰碰碰碰碰| 久久亚洲婷婷| 亚洲AV无码国产精品久久久久| 爱妃国产亚洲视频中文字幕| 国产综合久久久麻桃个| 另类老少妇| 99国产精品自在自在| 精品人妻二区三区| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | av九九| 精品超碰国产| 91爽啪| 少妇高潮99p| 欧美一级三级| 乱精品一区字幕二区| 日韩欧美成人午夜福利| 欧美熟妇成人一区二区| 精品三级在线专区| 天天综合精品| 男人天堂新在线| 欧美色91| 韩国免费播放一级毛片| 成人免费性爱视视| 岛国黄片网站| 亚码人妻| 91插B网站| 99最新日韩偷拍视频| 97在线资源| 久草色在线观看| 精品成人久久久人人亚洲| 久久成人午夜狠狠| 天天干18禁| 翔田千里AV无码秘 三区| 日日夜夜摸| 日婷婷| 国产精品999zyz| aaaa少妇高潮大片| 亚洲不卡不卡中文字幕不卡 | 蜜桃av综合网发布| 日韩有码免费视频| 久草婷婷| 久久久久久人| 蜜臀久久99精品久久久久| 国产强奸AV在线| 370p日韩欧美亚洲精品| av中文在线| 日韩一级二级在线| 久9综合在线| 国产精品懂色tv影视免费观看| 另类小说综合网| 国产精品香蕉热久久新品| 大地资源在线观看中文第二页| 婷婷五月天成人网| 91欧美性| 99久久亚洲精品无码毛片潘甜甜| 成人三一级一片aaa| 99操视频| 欧美亚洲丝袜美女电影| 四虎在线观看网站| 色吧91| 国产无马视频| 射丝袜高跟鞋99| 超碰69| A级片一区| 免费综合亚洲中文| 欧美少妇高潮久久91| 殴美色网| 一本一道vs波多野结衣| 青青草啪啪网| 五十路一区无码| 国产人妻精品一区二区三区秋霞| 91老熟妇| 91久久久久久| 精人妻无码一区二区三区伊人直播| 情色五月天就去干| 久综合国内精品自在自线| 亚洲天堂,男人| 丁香婷婷激情五月天无毒不卡| 天天久久久久久| 丁香九月 婷婷| 中文字幕在线播放2中文字幕在线观看2 | 国产一区96在线| 精品人妻一区二区蜜桃视频| 玖玖爱在线视频免费观看| 极品色www影院| 青青草视频导航官网| 亚州综| 人人看人人摸人人色| 日本九九久久99播| 成人午夜高潮av猛片| 激情综合97| 99热婷婷一区二区三| 免费伦费视频在线观看| 亚洲欧美国产中文字幕| 亚洲成aⅴ人片不卡无码| 岛园激情| 欧美亚洲在线| 亚洲色鬼| 欧美97爱| 亚州精品一区二区三区香中文字幕在线| 午夜福利合集| 色综合九九| 亚欧操逼片在线观看 | 亚州少妇| 成人青青草原伊人| 久久亚洲av成人无码国产| 欧美91网站| 一级日本牲交大片好爽在线看| 好淫网一二三视区| julia国产在线| 国产综合操逼高清| 精品乱码在线观看| 中文字幕 国产 精品 | 男人a天堂手机在线版| 夜夜福利| 殴美大黄片| 2020中文字幕在线| 你懂得91| 91人妻少妇| 91 丝袜在线| 日本操逼视频不卡直接放| 国产25页| 国产精品成人无码av无码免费| #NAME?| 久久av一级av少妇av高潮| 黑人与人妻| 99热只有这里有精品| 女人香蕉久久毛毛片精品| 任你艹| 久操91视频| ′ !γ}丶。。久久精品欧美一区二区三区| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 操逼天美3区| 和协影院中文字幕三区| 国产51色综合久久免费| 9久9久| 日本三级黄页| 午夜福利av电影在线| 欧美综合色综合| 久久日韩毛| 欧美在线播放| 97视频新免费| 中文字幕人妻丝袜| 国产欧美精选自拍一区| 日韩十八禁| 1204金沙人妻懂旧版免费| 欧美v亚洲v日韩v最新在线二区| 美女性91| 老熟女中文字幕高清| 久久女人一区二区三区| 免费A V在线播放| 欧美色狠| 精品国产a∨一区天美传媒| 婷婷久草一区二区三区| 中文字幕中文字幕一区二区| 国产三级片在线观看| 伊人 俄罗斯 a v| 色性综合| 乱伦av麻豆| 亚洲欧美色图| 精品传媒在线一区| 青青草国产一区二区三区| 中文字幕91综合| 日本免费中文字幕在线| 女色综合| 精品国产乱码久久久| 日欧毛片久久| 天天内射| 激情终合网| 黑操B| 天天天天天干夜夜夜夜夜操| 国产极品99热在线播放69| 一本色道无码DVD中文字幕| 色悠久久久av| 是还免费视频1727我| 国产欧美一区二区| 黄骗免费网站| …亚洲黄色厕厕女女在线播…| 亚州综合AⅤ| 亚州综合电影| 久久有碼| 美女干逼2| 嫩草伊人久久精品| 99爱久久视频频| 日韩专区数据列表-第3230页-精品国产一区二区三区香蕉 久久99熟女人妻中文字 | 97精品97久久| 97视频网站| 国产免费永久精品无码| 女人高潮大叫一级毛片| 久草视频在线视频在线视频在线观看| 久久五月天婷婷丁香中文字幕| 日韩啊V| 99999re| 日韩9区| 色777999综合| 色网亚洲人| 蜜桃传媒视频第一区入口在线看| 深夜国产福利| 久久e6只有精品| 精品无码久久久久久久杏吧| 99操逼| 欧美男人的天堂| 99久在线精品99re8蜜桃| 天天操福利视频综合网站| 欧美在线第五页| 欧亚日本情色| 综合在线导航一区| 九七毛片九九毛片| 91内射| 欧美999999| 夜夜国产一区| 欧美色图99| 夜夜操91744565| 亚洲无码视频免费在线观看网址!| 清纯唯美亚洲综合| 97色伦97色伦国产欧美| 国产黄色剧情影片麻豆免费播放| 99这里只有精品国产| 国产人妖的免费的视频| 国产成人精品日本视频| 色五月婷婷五月天| 9久久9综合| 亚洲凸凹超碰成人| 亚洲图片91| 欧美,日韩综合久久| 一区二区影视| 婷婷爽人人婷婷爽视频| 在线a亚洲视频播放在线| 91精品微拍福利| 网页导航五月天免费一二三区| 99热日本| 久久国产精品熟女人妻| 日韩图色| 久久精品国产亚洲AV无码电影| 欧洲色| 七久久久| 96精品一区| 精品人妻一区二区免费蜜桃视频| 久久香蕉综合一本到3atv| 少妇超碰在线| 日韩综合色网| 中国一级操逼视频| 99999久久久久9国产精品| 亚州高清av| 天天看天天日天天操| 国产综合网站在线播放| 五十路二区在线| 99re这里只有| 日本女人操逼| 夜夜青青无码影院| 九九九九九九九九九国产精品| 美国精品国产精品| 大香蕉伊利av| 亚洲影视第一页| 人人妻人人玩人人澡人人爽| 亚洲国产午夜真人一级片中文字幕精品黄网站| 色穴精品| 国产精品久久久| 影音先锋国产精品| 色香综合天天影视综合 | 五月激情综合网| 天天日骚逼熟女| 370p日韩欧美亚洲精品| 亚洲 图片 欧美 色图| 人妻少妇精品久久久| 亚洲最新Av| 免费观看有码高清视频| 日韩精品亚洲一二三| 大色综合网| 97精品97久久| 日韩激情中文字幕有码| 欧美人人天天网| 国产一区自拍欧美日韩| 97天天操天天干| 8x福利精品第一福利视频导航| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 日韩激情无码影院| 蜜桃臀 后入 一区 二区 三区 在线| 大茄子熟女AV导航| 婷婷色色五月| 东京热男人的天堂| 1956日韩精品| 99re这里只有精品9| 黑丝内射一区二区三区| 青青草国产欧美非洲黑人| 色色色综合| 9久精品| 视频在线观看一二三区| 不卡av免费在线网址| 中文字幕在线观看第二页| 久久天堂| www.男人天堂| 99色天堂| 91精品国产91久久青草| 婷婷丁香六月| 激情天天视频| 手机av亚洲丝袜美腿日韩第一页二页| 333kkkk·亚洲com久久| 精品夜夜澡人妻无码AV| 欧美高清性猛交| A级毛片在线看免费| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 尹人免费观看视频在线| 一区二区 韩日AV| 亚洲开心网| 无码人妻毛片丰满熟妇精品区| 91痴汉| 蜜桃中文字日产乱幕4区| 成全动漫视频观看免费下载| 亚洲无码超碰免费| 99超碰色| 色色色色日本| 美女主播色欲91抠b在线播放| 99 国产丝袜在线| 少妇人妻激情四射| 夜夜嗨一区二区| 日韩精品中文字幕一| 亚洲精品国产熟女| 看黄片视频免费| 最新欧洲欧美日本激情网站| 人人性爱视频免费| 中文字幕免费看| 午夜精品久久久久久久男人的天堂 | 激情露脸爱| 91成人久久 | 伊人女女资源在线观看| 久热伊人| 久久久青青草| 欧美黑人精品一区二区| 操东北女人| 日日干夜夜骑| 啪啪91| 久久色人体 | 久艹99| 大香交伊人网| 中文字幕av乱伦| 欧美日韩黄片精品在线| 91丝袜| 久久久96精品| 九月丁香婷婷| 五月天婷婷小说| 强奸乱伦av电影| 国产狂喷潮在线精品| 亚洲情色 自拍| 麻豆天美传媒在线视频天堂| 久久亚洲不卡| 色色综合网站| 日本精品第一视频在'| 黄色大片免费在线| a网站免费观看| 国产精品一区二区a| 亚洲图片欧美偷拍| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 物尤视频一区二区| 国产13区| 久久久久国产亚洲一区欧美色图日韩| 夜夜一区二区| 色婷婷五月天| 丁香五月婷婷五月| 中字乱伦AV| 囯产乱伦一区二区三女 | 大屁股国产在线视频| 久久九七| 美女诱惑在线一区| 十八禁黄色成人网站观看| 亚洲欧美爆| 欧美一区二区日韩传媒搭讪精品| 亚洲精品美女久久久久久久久| 国产女同视频在线播放| 高清无码一区二区三区| ..日韩av毛片精品久久久| 亚洲成人在线高清| 亚洲伊人a线观看视频| 无码动漫av中文字幕| J?P?NESEHD熟女熟妇伦| 自拍偷拍国产欧美日韩韩| 波多野结衣之双飞调教在线播放| 日本在线观看网址| 欧美传媒| 91社操逼| 亚洲九月丁香| 超碰人人草| 开心激情站| 青娱乐av在线| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 久久久久元码视频| 视频黄站| 天堂男人网| 日韩成人高清一区二区| 黄色香蕉视频网站一区| 婷婷另类小说| 久9久9久9久9久9久9| 加勒比99999| 26UUU欧美日本| 黄页网站免费高清在线观看| 成人午夜视频免费播放| 花野真衣| 天天日天天射天天干| 亚洲精品美女操逼| 国产成人五月天丁香花| 亚洲 小说 欧美 激情 另类| 日韩av影片在线观看| 五月天婷婷欧美三区| 蜜桃不卡一区二区| 91欧洲入口| 中日韩免费看男女操逼大全| 久久久久久国产精品免费网站| 激情婷婷五月天| 亚洲综合影片| 老熟女阿 国产91| 亚洲视频1区| 狠狠干,狠狠操| 密臀AV在线| 久久免费少妇| 五月色网| 熟妇一区,二区,三区。| 9丨亚洲一区二区在线| 亚洲色久| av橘色网站| 中文字幕乱码人妻二区三区| 夜色五月天| 粉嫩久久久极品| 一级AV性爱| 九月婷婷综合| 涩涩久久精品| 天天视频网站黄| 精品久久久九九九孕妇| 美美91成人国产精品欧美精品久久久久久久 | 久久久中文| 91|九色|国产熟女| 久都青青视频 | 熟女精品va中文字幕| 一区二区三区网站日日骚| 舔人妻中文免费视频| 久久精品一区二区一8| www99热| 视频在线观看青青99国产| 搡老熟女免费视频| 久久国产精品一级二级三级| 久久区| 亚洲欧洲偷拍一区| 国产精品熟女一区二区三区| 91色艳| 日本阿v天堂在线观看| 久久久久久亚洲精品不卡人乳| 美女好片色日本| 五月婷婷六月丁香| 欧美中文综合| 九九无码久久精品视频| 国产精品一区二区a| 成人熟女视频一区二区三区| 大二网站亚洲| 91国产美女丝袜足交精品视频| 日本一区视频在线观看| 校园春色亚洲无码| 超碰人人超在线观看| 大香交| 九九热精品在线| 色悠久| 99999精品成人| 人人妻人人爽 97人人看碰人免费公开视频 | 五月天亚洲网| 色色操| 精品无码久久久久久久久果冻糖心| 蜜臀精品1区2区| 日韩中文字幕视频| 后入福利视频| 丁香激情五月天| 日韩在线观看三级电影| 91熟女综合| 久久美女福利是上海美女| 日本不卡一二区| 日韩欧美成人大香蕉| 国产91啪| 偷偷人人精品女女久久| 欧美性爱一内片一区二区三区| 欧美一级美片在线观看免费| 欧美专区17页| 在线 亚洲 网爆 自拍| 国产精品久久99日日| 欧美草草高清日韩视频| 91最新综合| 久久东京国产精品视频| 色姑娘综合网| 四虎免费视频| 欧美在线伊人色| 白嫩国模丰满一二三区| 91熟女视频| 五月天亚洲网| 日本裸体久久色噜噜| AA特级绝黄| 亚洲美女AV无码| 大香蕉日亚洲日本亚大| 色综合中文字幕不卡| 大香蕉免费乱伦视频| 大JI巴好深好爽又大又粗视频| 乱久久久| 日日天天久久啊啊aaa| 欧美日韩操逼嗦吊| 91丨九色丨国产丨人妻在线| 加勒比99999| 无码人妻系列少妇| 男人的天堂激情| 国模精品娜娜一二三区| 国产精品网址| 91天天看| 麻豆av一区二区| 人妻素股| 超碰天天操| 亭亭丁香激情| 天美AV片| 婷婷色综合| 久久精品国产72国产精品福利| 青青操网| 精品视频在线观看精品| 美女黄页网站| 亚洲欧美国产精品久久久久久久| 亚洲性图91| 久久久久久91香蕉国产| 久久久久久久久久久久久久久性生活视频 | av天天在线观看| www色色色com| 婷婷在线精品| 国产伦精品一区二区三区在线观| 97人妻免费中文字幕| 日本黄色精品专区网站| 中文字幕在线免费观看2| 91亚洲情色| 大香久久| 青草综合| 肉动漫无遮挡h在线观看| 无码人妻精品酒店| 97狠狠| 久久大黄片| 国产精品久久久 | 韩国三级色呦呦| 99热这里只有精品18| 日韩精品一二三| 亚洲欧美校园| 加勒比综合在线| 91成人精品| 欧美性爱一区二区三区| 东京热综合久久一区二区| 97美日韩视频| 综合97| 性爱综合一区二区| 亚洲精品毛片在线观看| 国产Aα| 日本女优在线视频福利| 人人做人人妻人人夜视频| A片 AV一级在线播放观看免费| 国产强奸超碰AV| 亚洲AV成人在线| 亚洲无套久久嗯嗯| 超碰碰97| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 婷婷五月综合在线| 五月天婷婷基地| 亚洲AV免费在线观看| A啊啊在线观看| 91无摭挡| 久久久久99999| 激情五月综合开心五月| 熟女五十路一区二区三| 午夜精品探花| 成人综合色网| 免费网色网站| 四虎免费在线播放| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧差乱伦二三| 亚洲制服aⅴ中文字幕| 久/久精品99看9| 91黑丝少妇| 亚洲超碰综合网| 91bbb| 人人操人人搞人人草| 亚洲黄色影视| 欧美熟妇操操视频| 狠久久| 最新av网站在线观看| 久久久久久AⅤ无码免费肉站 | 熟妇女伦乱视频视频| 欧美影院一区二区三区| 操逼片中文| 一二三四日本视频高清| 精国久久一区二区三区98| 亚洲欧美清纯| 亚洲成人日韩小说| 东京热男人的天堂网| 久久久久久久久久久久久久久久9| 国语精品av| 国产成年精品高清在线观看91| www色色com| 久久久久久久久久黄色网| 亚洲狠狠入| 亚洲免费成人在线高清无码视频| 色婷婷丁香五月| 青青草成人视频在线观看二区| 一本色道久久综合精品婷婷| 精品国产一区二区三区香蕉欧美| 七久久久| 精品国产乱码久久久久久日本公司| 天天干天天舔| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 小草三级久久观看| 久久精品操| 男人a天堂手机在线版| 青青草吊丝| 酒色综合网| 亚洲另类电影| 玖玖超碰熟| 九月激情婷婷| 色 婷97| 亚洲av噜噜噜噜噜噜| 久色网| 精品熟妇视频一区二区| 一线黄色免费性爱片| 人人超碰在线观看黄| 亚洲男人天堂av| 天美精品av| 国产传媒一区二区三区| 婷婷久久大香蕉| 亚洲丝袜二区在线| 久久鲁干| 免费男人的天堂| 亚洲欧洲日韩国产自在线| 青青草色插素人| 无码区蜜乳| 熟妇艹鸡八| 久久国产熟女影院| 成人日本精品九区| 国内偷拍精品一区二区| 人妻天天爽夜夜爽爽| 欧美啪啪色吧在线| 欧美综合骚| 日本操逼视频免费| 夜夜高潮夜夜爽高清视频一 | 国产suv精品一区二区四| 中文久久久| 久久久久久夜夜夜夜夜| 欧美亚洲| 日韩三级在线观看mp4| 亚洲,日韩,欧美,成人播放| 国产黄色动态精品| 久久黄色视频一区二区三区| 欧美日韩青操| 亚欧性爱ab| 极品美女嘿咻| 最新一二三区视频| 国产精品4p在线观看| 天天插夜夜爽| 国产精品自拍欧美在线| 91美女视频。| 色哟哟国产精品免费网址| 亚洲精品国语在线播放| 日韩精品操少妇| JIZZJIZZ国产精品喷水| 欧美丝袜91| 97网址www| 中国一级特黄大片护士| 国产深喉| 久久久久密| 国产一区二区精品久久99| 亚洲狠狠入| 搡老女人老妇女老妇老熟女怎么读| 国产拍偷精品网站| 国产99999久久精品| 国产日韩欧美三级片| 亚洲精品久久久久毛片A片拉屎 | 久久精品一区二区三区蜜桃臀| 91久久久久久久| 天天日天天操天天射河南省| 少妇专区一二三四五| 久久露脸国产老熟女| 少妇被c 黄 免费观看| 亚洲污污网站| 成人在线视频二区| 亚洲国产婷婷在线播放| 人妻天堂网| 99久在线精品99re8a| 五月婷婷综合在线| 亚洲精品国产无码高清| 揉揉揉夜夜| 日韩av色图综合| 久久99综合| 17c在线成人免费A片观看| 亚洲一区中文字幕| 国产精品午夜成人福利| 九九亚洲视频| 久久久久久久亚洲Av无码| 国产精品扒开腿做爽爽爽视频| 色欧洲97| 中文久久一区| 五月婷婷深深爱| 日韩 欧美 另类 人妻| 免费精品无码一级毛片牛牛影视 | 国产超碰| 日本无码1| 日韩欧美亚欧在线视频| 高清无码学生妹高潮| 黄日韩| 免费看美国人人爽,人人操| 久久精品国产72国产精品福利| 国产精品嫩草影院午夜两性| 91丝袜视频在线观看| 精久久久| 91美女視頻| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 亚洲国产美女久久久久| 亚洲情色 自拍| 久久精品99久久久久久| 丝袜综合| 亚洲一二三四区机械| 大香蕉免费中文| 色五月综合网| 日韩不卡a级视频专区| 91午夜无码| 日日操免费视频| 中文字幕久久婷婷丁香五月天| 99999国产精品| 人妻91少妇| 999热日韩精品| 九色 蝌蚪 熟女自| 亚洲drav色图| 97操在线| 在线情色电影 91大 | 国产中午字一暮区| 黑人干亚洲| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 熟妇女伦乱视频视频| 极品一区二区三区免费| 伊人久久亚洲色欲综合网站| 久久熟女久| 加勒比av网| 嗯~啊~轻一点 视频| 欧美专区17页| 欧美在线亚洲| 91高潮| 偷拍精品一区二区三区| 亚洲色婷婷久久91| 精品国产Av无码久久久亚洲| 91久久九九精品国产综合| 7777奇米影视久久| 日日日日做夜夜夜夜无码| 人人妻人射| 干婷婷综合网| 97操碰| 精品久久久久,69国产成人精| 亚洲天堂久久久久久粉红视频| 色婷婷av在线观看| www.伪伪| 377p欧洲日本亚洲大胆| 翔田千里无码中出中文字幕| 亚洲无线观看久久| 襙一襙| 1769国内精品视频| 日韩欧美性爱电影在线观看| 欧美日韩中文字幕人妻| 亚洲美女精品九九视频| 九九九九九九视频免费| 久久狠狠色噜噜狠狠狠狠97| 日韩精品在线放| 欧美性爱无码一区二区三区| 亚洲精品国产无码高清| 中文字幕日韩人妻视频一区二区三区 | 色九九九| 国产丸一视频| 96一区二区| 国产野战露脸在线播放| 欧美一级美片在线观看免费| 亚洲精品97| 97色伦97色伦国产欧美| 免费观看有码高清视频| 亚洲中文sv| 日本黄 R色 成 人网站| 人人爽夜夜玩视频| 三级AV入口| 91老熟女91老女人| 三男一女不戴套的A片| 99久久网站| 72av视频| 极品丝袜无码| 婷婷丁香激情| 福利风月五月天影院| 人人性爱视频免费| 国产性刺激| 欧美一区二区日韩三区| 日日黄色三级网站| 亚洲免费在线探花| 丰满人妻一区| 久久性爱城| 97超碰美女| 九热大香蕉| 日韩av影片在线观看| 视频二区美腿制服人妻欧美| 色色色综合网| 免费中文综合精品| 91美女视频电影| 日韩成人网址| 成人av性爱电影在线观看| 国产99999久久精品| 人妻AV 中文字幕的| 亚洲婷婷综合网| 黄页网站成人免费| 中文一区二区婷婷视频| 淫荡少妇免费| 久久久久久精| 国偷自 一区| 日韩一区二区熟女| 婷婷久热| www黄片免费看com| 十八禁啪啪视频| 99AV| 在线亚洲丝袜视频网站| 亚洲 中文 女同| 久久99亚洲精品久久99果| 日韩成人精品| 色悠久| 亚洲乱妇p22| 美女黄页网站| 欧美第二页午夜| 欧美国产一区二区三区麻豆传媒| 天天爽天天| 激情综合色| 五月丁香婷婷色| 成人免费不卡在线视频| 26UUU欧美激情一区二区| 免费精品无码一级毛片牛牛影视 | 欧美久久毛片基地| a网站免费观看| 日本性爰一道本| 免费少妇一区二区| 日本东京热久久久电影| 久久超碰com| 凹凸精品熟女在线观看| 人伦四五区| 暴力av在线| 国产视频97| 亚洲人妻精品一区二区| 丝袜天堂网| 4虎在线观看| 人人操人人摸超碰| 婷婷色综合欧美日韩| 蜜臀99久久精品久久久懂爱| 国产精品人妻无码久久久互動交流 | 欧美日韩成人| 97人人射| 久草资源在线视频官方总站日韩丝袜美腿| 亚洲日韩一区电影| 中文字幕一二三区| caopeng97人妻| 欧美极品色| 蜜臀久久久99久久久久| 狠狠操狠狠操操| 日本性爰一道本| 91久久久久久| 天天操夜夜操狠很操| 俺去啦俺来也久久综合| 国产1024在线播放| 国产婷婷综合在线观看| 中文字幕在线2| 九九九九九九九| 操逼内射干逼白丝91| 国内97干免费看| 久草精品国产蜜臀| 欧美 传媒 麻豆 日韩 偷拍| 九九夜精品九九在线| 2019天天操天天爽天天拍| 亚洲色欲一区二区三区| 又黑又大又粗| 九九九午夜| 夜夜 中文视频rt| 欧美激情亚洲| 男人天堂网站| 密乳AV免费观看| 激情五月天婷婷| 99久久久无码| 超碰在线在公开超碰在线在公开| 久久精品高清无码一区| 啊啊嗯嗯好爽| 高清国产精品无码| 日本狠狠干| 亚洲色鬼| 人人妻人人色一区二区三区| 欧美AB在线| 91在线无码精品秘 软件| 免费久久9999| 干b网| 大香网站| 插老姨肥穴| 欧美超碰97| 亚洲精品第一| 狠狠爱AV| 精品免费囯产一区二区三区| 伊人久久综合精品欧美| 久久天天摸| 欧美在线电影| 午夜福利免费精品视频| 97超碰热线| 天天日天天干天天色| 狠狠穞A片一區二區三區| 99最新日韩偷拍视频| 老司机深夜18禁污污网站| yirendaxiangjiashipin| 国产日本久久免费精品| 日韩99999| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧亚 另类 久| 日韩国产成人自拍视频| 亚洲天堂一二| 五月激情在线| 人人操人人色人人摸| 精久久久| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 日韩熟女精一区二区三区不卡| 欧美日本国产日韩激情视频| 黄久在线| 无码伊人久久大杳蕉中文无码| 欧美日韩小说| 亚洲情色五月天 | 高跟丝袜AV专区国产| 91成人亚洲色图| 欧美日韩大黄片| 一级免费精品| 97日视频| 美女尤物福利视频| 午夜福利成人免费视频| 天天综合网~91| 国产日韩精品一区二区三区| 亚洲AV无码黄色强奸| 久久神马| 九99久久| 日韩情色AV| 噜噜在线| 最新欧洲欧美日本激情网站| 欧美精品久久久久久久久88| 94色色电影网| 日本超碰色精品| 中文字幕片| 国产精品青青草| a片在线播放| 亚洲中文字幕一区| 人妻密肉在线观看| 嗯嗯啊啊视频在线看| 九九探花视频在线观看| 少妇高潮流水av免费| 久久久久久九九九九-美女久久久久久久-成人AV | 亚洲老司机123专区| 18岁禁 茉莉成人久久| 久久久久成人蜜桃精品| 国产精品成人在线|