개발 꿀팁/PHP

PHP 생성 유일한 RequestID 클래스

Jammie 2022. 8. 15. 15:16
반응형

본고에서는 PHP 생성 유일 Request ID 클래스를 소개하고 session_create_id()와 uniqid() 방법을 사용하여 유일성을 보장하며, 완전한 코드 및 프레젠테이션을 제공하여 여러분이 쉽게 학습하고 사용할 수 있도록 합니다.

현재의 시스템 설계는 일반적으로 분산 시스템을 사용하는데, 하나의 요구는 아마도 몇 개의 마이크로 서비스를 호출하여 처리한 후에 다시 결과를 반환해야 할 것이다.요청이 문제가 생겼을 때 어떤 마이크로서비스에 문제가 생겼는지를 추적하는 것은 매우 어렵다.

각 서버에 대한 액세스를 요청할 때, 이 액세스에 RequestID(RequestID)를 추가할 수 있습니다. 요청 시작, 요청 프로세스 및 요청이 끝날 때, 요청 프로세스의 중요한 데이터를 로그에 기록합니다(예: 액세스 시).의 파라미터는, 그러한 방법을 거쳐, 마이크로 서비스, 종료시에 반환되는 데이터 등), 액세스에 문제가 생겼을 때 참고로 하여, 문제 추적이 용이하다.


예를 들어, 하나의 요청은 몇 개의 마이크로 서비스를 거쳐서 다시 출력해야 한다

 

요청 ->A ->B ->C-A ->출력

만약 접속 과정에 출력이 없거나 출력이 잘못된 경우 Request ID를 기반으로 A, B, C에 해당하는 로그를 찾아 어떤 서비스에 문제가 있는지 확인할 수 있다.


코드는 다음과 같습니다.
RequestID.class.php

<?php
/**
 * PHP 생성 유일한 RequestID 클래스
 * Date:    2018-04-10
 * Author:  fdipzone
 * Version: 1.0
 *
 * Description:
 * PHP 구현은 고유한 Request ID 클래스를 생성하고 session_create_id()와 uniqid() 방법을 사용하여 구현하여 유일성 보장
 *
 * Func:
 * public  generate 고유 요청 ID 생성
 * private format   요청 ID 형식 지정
 */
class RequestID{ // class start

    /**
     * 고유 요청 ID 생성
     * @return String
     */
    public static function generate(){

        // session_create_id() 메서드를 사용하여 접두사 만들기
        $prefix = session_create_id(date('YmdHis'));

        // uniqid() 메서드를 사용하여 고유 ID 만들기
        $request_id = strtoupper(md5(uniqid($prefix, true)));

        // 요청 ID 형식 지정
        return self::format($request_id);

    }

    /**
     * 요청 ID 형식 지정
     * @param  String $request_id 요청 ID
     * @param  Array  $format     형식
     * @return String
     */
    private static function format($request_id, $format='8,4,4,4,12'){

        $tmp = array();
        $offset = 0;

        $cut = explode(',', $format);

        // 설정에 따라 포맷하기
        if($cut){
            foreach($cut as $v){
                $tmp[] = substr($request_id, $offset, $v);
                $offset += $v;
            }
        }

        // 나머지를 넣다
        if($offset<strlen($request_id)){
            $tmp[] = substr($request_id, $offset);
        }

        return implode('-', $tmp);

    }

} // class end
?>

demo:

<?php
require 'RequestID.class.php';

// 10개의 요청 ID 생성
for($i=0; $i<10; $i++){
    echo RequestID::generate().PHP_EOL;
}
?>
16532925-4502-CDAD-23A2-463FC7B5803A
500B77AD-CD24-0DDA-9E6E-2FDF2DD7CA94
813143D0-958F-9F56-E04F-679598594452
E5EE1B0B-E0D6-3E60-D831-462C5A262FCE
79E714B5-A37F-4B5E-4EDE-83E18391EBF9
E1C440AB-FC2C-AC74-E79A-016FD59D9651
AE483861-1040-BE8D-E523-D7638D0F0D35
BBD7A03A-36C9-24B7-C453-FB1DDD6E201E
BF62C3E6-9C5F-22CB-668D-381863B35268
E97E1F44-F048-962A-5BF7-1113727551B1

주의 session_create_id 방법은 php 7.1 이상의 버전이 있어야 사용할 수 있습니다.

반응형

'개발 꿀팁 > PHP' 카테고리의 다른 글

php XML 파일 해석 클래스  (0) 2022.08.16
php 광고 로딩 클래스  (0) 2022.08.15
php 양방향 큐 클래스  (0) 2022.08.10
php CSV 추상화 내보내기  (0) 2022.08.10
php Time 페이지 실행 시간 모니터링 클래스  (0) 2022.08.09