0

저희 가게에서는 12 개의 클라이언트 설치를 위해 몇 가지 WEB/SMS/DB 솔루션을 개발했습니다. 응용 프로그램에는 실시간 성능 요구 사항이 있으며 제대로 작동하기에 충분합니다. 문제는 클라이언트 (프로덕션 서버의 소유자)가 우리가 만들고 배포 한 응용 프로그램의 성능에 문제를 일으키는 사용자 지정에 대해 동일한 서버/데이터베이스를 사용하고 있다는 것입니다. 고객의 사용자 지정클라이언트 수정 사항이 프로덕션 시스템에 미치는 영향을 제한하는 방법

몇 가지 예 :

  • 는 쿼리
  • 없음 기본 키, 인덱스, 또는 FK 제약에 다른 데이터 유형으로 캐스팅 얻을 열 많은 텍스트 데이터 유형과 큰 테이블 추가
  • count(*) from table where id = x을 사용하는 외부 스크립트를 스크립트의 루프에서 사용하여 같은 스크립트에서 나중에 더 많은 쿼리를 작성하는 방법을 결정합니다. 서버 (플래너 최적화하거나 단일 패스에서 모든 것을 할 수없는 대량 작업)
  • 모든 새로운 코드 파일은 0777 권한

클라이언트는하지 않는으로, 루트가 소유/작성되지 않습니다 제안/비평 잘. 스크립트를 직접 포트/변경하려고하면 이전 코드가 돌아와서 우리가 변경 한 사항을 모두 망칠 수 있습니다! 또는 유스 케이스에 대한 지식이 제한적이기 때문에 기능을 중단하고 변경 사항을 최적화하려고합니다.

제 질문은 리소스를 우리가 만들고 배포하는 것 이외의 다른 쿼리/응용 프로그램으로 어떻게 제한 할 수 있습니까? 이와 같은 시나리오에 실용적인 옵션이 있습니까? 우리는 OSS 솔루션을 갖고 있다는 점에 자부심을 가졌지 만 그것이 책임이되는 것으로 보입니다.

Linux Distos의 범위에서 실행되는 PG 8.3을 사용합니다. 클라이언트는 PHP를 선호하지만 셸 스크립트, perl, python 및 plpgsql은 모두 한 가지 형태로 시스템에서 사용됩니다.

답변

1

이 문제는 첫 번째 클라이언트가 첫 번째 컴퓨터에 대한 전체 액세스 권한을 부여받은 후 약 2 분 후에 시작되었으며 이후로 사라지지 않았습니다. 우선 순위가 비즈니스 지향적 인 작업을 빨리 완료하게 될 때마다 언제든지 모든 사람들을 위해 일을 망쳐 놓을 것입니다. 올바른 설계와 구현은 저렴한 해킹보다 어렵 기 때문에 일이 어떻게 이루어지는 지 알 수 있습니다. 당신은이 문제를 풀지 않을 것입니다. 당신이 할 수있는 일은 클라이언트가 당신보다 당신과 일하기가 더 쉬운 방법을 찾는 것입니다. 네가 올바르게하면, 잔소리보다는 훌륭한 서비스처럼 보일 것이다.

우선 데이터베이스 쪽. 이제 PostgreSQL에서 쿼리 리소스를 제어하는 ​​방법이 있습니다. 가장 큰 어려움은 "nice"와 같은 도구가 CPU 사용을 제어한다는 것입니다. 그러나 데이터베이스가 RAM에 맞지 않으면 I/O 사용으로 인해 죽을 수도 있습니다. 이 문제를 요약 한 developer message을 참조하십시오.

  • 이 (example 2example 1) 프로세스 우선 순위를 변경하는 C 기능을 설치하고 있는지 확인하십시오 실제로는 클라이언트를 통해 레코딩 CPU의 경우

    이제, 당신은 그 상황을 개선하기 위해이 개 기술을 사용할 수 있습니다 그들이 뭔가를 실행할 때마다 먼저 호출됩니다 (어쩌면 psql 설정 파일에 넣을 수 있습니다, 다른 방법이 있습니다).

  • 사용자 ID에 의해 생성 된 포스트 마스터 프로세스를 찾아 스크립트를 작성하여 cron이나 데몬으로 자주 실행하도록하는 스크립트를 작성하십시오.

문제는 그들이 실행중인 특정 쿼리 프로세스가 아니라 큰 구조로 변경되는 것 같습니다. 이를 극복하는 유일한 방법은 침입자 인 것처럼 클라이언트를 치료하고 컴퓨터 보안 분야의 접근 방식을 사용하여 상황을 망칠 때를 감지해야합니다. 진심으로! 트립 와이어 (Tripwire)와 같은 침입 탐지 시스템을 서버에 설치하십시오. (더 좋은 도구가 있습니다. 단지 고전적인 예입니다.) 사람들이 아무 것도 만질 때 알려줍니다. 0777의 새 파일입니까? 적절한 IDS 보고서에서 바로 뛰어 내야합니다.

데이터베이스 측에서는 수정중인 데이터베이스를 유용하게 직접 탐지 할 수 없습니다. 스키마의 pg_dump를 매일 파일 (pg_dumpall -gpg_dump -s)로 가져온 다음 마지막으로 전달한 것에 대해 diff를 적용하고 변경된 시점에 다시 경고해야합니다. 클라이언트와의 접촉은 "서버에서 변경 한 것으로 나타났습니다 ... 그걸로 무엇을 성취하려고합니까?"라고 말하면서 실제로주의를 기울이고있는 것처럼 보입니다. 영업 기회를 놓치지 않고 곧바로 잡으려고한다는 것을 알고있는 것만 큼 비웃는 것을 중단 할 수 있습니다.

다른 작업은 각 클라이언트 상자에서 가능한 한 많은 버전 제어 소프트웨어를 설치하는 것입니다. 각 시스템에 로그인 할 수 있어야합니다. 설치하고 변경된 사항을 확인하십시오. 그 메일을 정기적으로 보내십시오. 다시 말하지만 스키마를 관리하는 요소로 스키마를 덤프하는 것과 결합하면이 방법이 가장 효과적입니다. 데이터베이스에 존재하는 코드에 대한 심각한 버전 제어 접근법을 사용하는 사람들이 충분하지 않습니다.

여기는 유용한 기술 접근 ​​방식의 주요 집합입니다. 당신이 가진 나머지 부분은 컴퓨터 컨설팅보다 훨씬 많은 사람들의 문제인 고전적인 컨설팅 클라이언트 관리 문제입니다. FSM은 ODBC 액세스를 제공하고 Access에서 자신의 쿼리를 작성할 수 있다는 것을 발견하면 도움이됩니다.